您的位置 首页 java

java stream 流式编程

 import lombok.Data;
import java.util.Arrays;
import java.util.List;

/**
 * 场景:
 * 1. 需要ID为偶数
 * 2.名字要转成小写
 * 3.性别必须为1
 * 4.年龄>20岁
 * 5.按照名字降序排列
 * 6.取1个用户
 * 7.用一行代码实现
 */public class StreamDemo {

    public  static   void  main(String[] args) {

        User u1 = new User( 1,"A" , 12,1 );
        User u2 = new User( 2,"B" , 22,1 );
        User u3 = new User( 3,"C" , 34,0 );
        User u4 = new User( 4,"D" , 8,1 );
        User u5 = new User( 5,"E" , 36,2 );
        User u6 = new User( 6,"F" , 22,1 );
        List<User> listUser = Arrays.asList( u1,u2,u3,u4,u5,u6 );

        //用一行代码实现
        listUser.stream()
                // 过滤ID为偶数 
                .filter((u)-> u.getId() % 2 == 0 )
                // 名字转成小写 
                .map( (u)-> {u.getName().toLowerCase();return u ;})
                //性别必须为1 
                .filter( u -> u.getSex() == 1 )
                //年龄>20岁 
                .filter( u -> u.getAge() >20 )
                //按照名字降序排列 ,
                .sorted( (uu1, uu2 )->  uu2.getName().compareTo(  uu1.getName() ) )
                //取1个用户
                .limit( 1 )
                . forEach (u-> System.out.println(u));
    }
}

//用户类
@Data
class User{
     private   Integer  id;
    private String name;
    private Integer age;
    private Integer sex;
    public User(Integer id, String name, Integer age, Integer sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
  

流的初始化方法

java stream 流式编程

流的关系图:

java stream 流式编程

有以下几个问题需要思考:

  • 如何记录每次的操作?

一个完成的操作包括源数据、操作与 回调函数 在具体实现中,使用实例化的ReferencePipeline来表示,Head、StatelessOp、StatefulOp的实例。

java stream 流式编程

通过ReduceOps对象找到了ReduceTask, 其实Stream内部的流实现还是使用了ForkJoinTask.

文章来源:智云一二三科技

文章标题:java stream 流式编程

文章地址:https://www.zhihuclub.com/187329.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图