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