Stream API优化代码

Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读

放大招,流如何简化代码

如果有一个需求,需要对数据库查询到的用户进行一个处理:

  • 筛选出年龄小于18的用户
  • 对筛选出的用户进行一个排序
  • 获取排序后用户的名字
public class User {
    
    private String name;
    private Integer age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

Java8之前的实现方式

public List<String> beforeJava8(List<User> userList){
    List<User> users = new ArrayList<>();
    for (User user : userList) {
        //1.筛选出卡年龄小于18的用户
        if(user.getAge()<18){
            users.add(user);
        }
    }
    //2.对筛选出的用户进行一个排序
    Collections.sort(users, new Comparator<User>() {
        @Override
        public int compare(User o1, User o2) {
            return Integer.compare(o1.getAge(),o2.getAge());
        }
    });
    //3.获取排序后用户的名字
    List<String> userNameList = new ArrayList<>();
    for (User user : users) {
        userNameList.add(user.getName());
    }
    return userNameList;
}

Java8之后的实现方式

public List<String> afterJava8(List<User> userList){
    return userList.stream()
            .filter(user -> user.getAge()<18)
            .sorted(comparing(User::getAge))
            .map(User::getName)
            .collect(Collectors.toList());
}

看现在5行就可以搞定,是不是简单了许多,接下来又来了新的需求

  • 对数据库查询到的用户根据性别进行分类,返回一个Map<String, List<User>>的结果

Java8之前的方式

public Map<String,List<User>> beforeJava8(List<User> userList){
    Map<String,List<User>> map = new HashMap<>();
    for (User user : userList) {
        if(map.get(user.getSex())==null){
            List<User> users = new ArrayList<>();
            users.add(user);
            map.put(user.getSex(),users);
        }else{
            map.get(user.getSex()).add(user);
        }
    }
    return map;
}

Java8之后的方式

public Map<String,List<User>> afterJava8(List<User> userList){
    return userList.stream().collect(groupingBy(User::getSex));
}

一行就搞定,这就是Stream API厉害的地方,如果想学习更多关于Stream流的操作,请点击下方链接

https://juejin.im/post/5d8226d4e51d453c135c5b9a
 

猜你喜欢

转载自blog.csdn.net/tianyucxh/article/details/102469374