第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());
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35524586/article/details/83111066