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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章