第1篇 java 8 流的学习----筛选和切片

筛选、切片和匹配
 查找、匹配和归约
 使用数值范围等数值流
 从多个源创建流
 无限流

/**
 * 筛选和切片
 */
public class Demo01 {
    public static void main(String[] args) {
        List<Dish> menues = Arrays.asList(new Dish("rice", true, 12, Dish.Type.FISH), new Dish("meat", false, 12, Dish.Type.FISH), new Dish("dog", true, 12, Dish.Type.FISH));
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 4);
        List<Dish> dishes = filter01(menues);
        List<Integer> eventNumbers = filter02(numbers);
        List<Dish> dishes2 = filter03(menues);
        List<Dish> dishes3 = filter04(menues);
        List<Dish> meatDish = filterMeat(menues);

    }

    /**
     * 用谓词筛选:
     * 筛选出所有素菜
     */
    public static List<Dish> filter01(List<Dish> menues) {
        return menues.stream().filter(Dish::isVegetarian).collect(Collectors.toList());
    }

    /**
     * 筛选各异的元素:
     * 以下代码会筛选出列表中所有的偶数,并确保没有
     * 重复
     */
    public static List<Integer> filter02(List<Integer> numbers) {
//        Set<Integer> collect = numbers.stream().filter(number -> number % 2 == 0).collect(Collectors.toSet());
        return numbers.stream().filter(number -> number % 2 == 0).distinct().collect(Collectors.toList());
    }

    /**
     * 截短流:
     * 流支持limit(n)方法,该方法会返回一个不超过给定长度的流。所需的长度作为参数传递
     * 给limit。如果流是有序的,则最多会返回前n个元素。比如,你可以建立一个List,选出热量
     * 超过300卡路里的头三道菜:
     */
    public static List<Dish> filter03(List<Dish> numbers) {
        return numbers.stream().filter(dish -> dish.getCalories() > 300).limit(3).collect(Collectors.toList());
    }

    /**
     * 跳过元素:
     * 流还支持skip(n)方法,返回一个扔掉了前n个元素的流。如果流中元素不足n个,则返回一
     * 个空流。请注意,limit(n)和skip(n)是互补的!例如,下面的代码将跳过超过300卡路里的头
     * 两道菜,并返回剩下的
     */
    public static List<Dish> filter04(List<Dish> numbers) {
        return numbers.stream().filter(dish -> dish.getCalories() > 300).skip(2).collect(Collectors.toList());
    }

    /**
     * 筛选前两个荤菜
     */
    public static List<Dish> filterMeat(List<Dish> numbers) {
        return numbers.stream().filter(dish -> Dish.Type.MEAT.equals(dish.getType())).limit(2).collect(Collectors.toList());
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值