Stream

Stream 入门介绍

使用举例:  对一组List 中的Apple操作。过滤出weight>130的, 然后根据color属性进行排序,最后只获得排序后的color.

不使用stream 写法:

   List lists = Arrays.asList(new Apple("red",130),new Apple("yellow",140),new Apple("green",150));
        List highlists = new ArrayList<>();
        //过滤出 weight>130 的APPle
        for(Apple apple : lists){
            if(apple.getWeight()> 130){
                highlists.add(apple);
            }
        }
        //根据color 进行排序
        highlists.sort((d1,d2)->d1.getColor().compareTo(d2.getColor()));
        List nameList  = new ArrayList<>();
        for(Apple apple : highlists){
            nameList.add(apple.getColor());
        }
        System.out.println(nameList);

使用stream 写法:

 List namelist2 = lists.stream()
                .filter(d -> d.getWeight() > 130) //先过滤
                .sorted(Comparator.comparing(d -> d.getWeight()))// 排序
                // 使用方法推导的模式
       //        .sorted(Comparator.comparing(Apple::getWeight))
                .map(d -> d.getColor())//只获取名字
            //  .map(APPle::getColor)
                .collect(Collectors.toList());
        System.out.println(namelist2);

  Stream_第1张图片                Stream_第2张图片   

Stream 可以用来 操作 Collection, source , sequence。

Stream 可以并行处理。

Stream_第3张图片

Stream 中 三个重要的概念:

sequence of elements  : 对应上面例子中的 Apple.

source                          :对应上面例子的List

Data processing operations  : 对应上面的filter, map  等操作。

Stream 是链式操作,每个操作都返回一个stream。这种链式 也可以是懒加载的。

Stream 流 是一次性的。例如:

 这种写法是会报错的。stream 只会操作一次。

Stream 与Collection 区别:

Stream_第4张图片

Stream 中 的 Data processing operations  分为两类:

Intermediate  operations  : 该操作会产生一个stream。 以便往下进项操作。 例如 fiter, map ,limit

Terminal   operations  : 该操作会中断 stream。 例如 foreach,collect ,reduce.

Stream 创建

 

 

 

 

 

 

你可能感兴趣的:(设计模式)