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