对集合操作的Stream类

  • 丰富了对Collection (List,Set)的操作

  • Stream流中的方法分为2类

  • 不能对流进行重复的操作,一次性的操作

  • 中间操作

    • 方法的返回值是Stream类型;

    • 惰性操作,如果不碰到终止操作 就不执行

    • filter:对流中数据进行过滤

    • map:对流中数据做映射

    • limit:限制流中数据个数

    • sorted:排序

    • distinct:去重

  • 终止操作

    • 方法的返回值不是Stream类型

    • 终止操作只能出现一次 而且必须在最后出现

    • count:表示统计流中对象的个数

    • reduce:合并 把流中的数据合并为一个数据

    • collect:表示收集流中的数据到 集合中

 private static void method3() {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(100);
        arrayList.add(199);
        arrayList.add(10);
        arrayList.add(60);
        arrayList.add(12);
        //生成Stream流对象
        Stream<Integer> stream1 = arrayList.stream();
        //filter过滤
        Stream<Integer> stream2 = stream1.filter(new Predicate<Integer>() {
            // test方法如果返回值是true 表示要留下的 false表示过滤掉的
            @Override
            public boolean test(Integer integer) {
                System.out.println(integer + " ****");
                boolean b = (integer >= 60);
                return b;
            }
        });
        //map映射 把流中的数据 根据同一个规则 映射为另一个数据
        Stream<Integer> stream3 = stream2.map(new Function<Integer, Integer>() {
            @Override
            public Integer apply(Integer integer) {
                return integer * 2;
            }
        });
        // limit限制 流中数据个数
        Stream<Integer> stream4 = stream3.limit(4);
        // sorted排序
        Stream<Integer> stream5 = stream4.sorted();
        //distinct去重 去除重复的数据对象
        Stream<Integer> stream6 = stream5.distinct();
        //collect() 表示收集流中的数据
        /*List<Integer> list = stream6.collect(Collectors.toList());
        System.out.println(list);*/
        //count() 表示统计流中对象的个数
//        System.out.println(stream2.count());
        //reduce 合并 把流中的数据合并为一个数据
        Optional<Integer> reduce = stream6.reduce(new BinaryOperator<Integer>() {
            @Override
            public Integer apply(Integer integer, Integer integer2) {
                return integer + integer2;
            }
        });
        System.out.println(reduce.get());

        System.out.println(arrayList);
    }
public static void main(String[] args) {
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(100);
        arrayList.add(199);
        arrayList.add(10);
        arrayList.add(60);
        arrayList.add(12);

        System.out.println(arrayList.stream().filter((item) -> {
            return item >= 60;
        }).map((item) -> {
            return item * 2;
        }).limit(4).sorted().distinct().reduce((a, b) -> {
            return a + b;
        }).get());
    }

上一篇:自用 Java 学习 IO流前总结(Stream流)


下一篇:第38讲 Android Camera2 API 通过CropRegion控制Zoom缩放