Java8 lambda表达式常用方法

时间:2022-06-26 19:45:35

这里记录的是平时经常遇到的用到lambda表达式的场景。
闲话不多说,直接上代码。

先定义一个用户类。

class User {
Integer id;
String name;

public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
  • 场景:有个User的List,需要将所有的用户ID取出来。
List<Integer> userIds = users.stream().map(u -> u.getId()).collect(Collectors.toList());
  • 场景:有个User的List,需要将所有的用户ID取出来,还得注意去重
List<Integer> userIds = users.stream().map(u -> u.getId()).distinct().collect(Collectors.toList());
  • 场景:有个User的List,需要将其放到HashMap里,key为用户ID,value为该User
Map<Integer, User> userMap = users.stream().collect(Collectors.toMap(User :: getId, u -> u));
  • 场景:有个User的List,需要将其放到HashMap里,key为用户ID,value为用户名称
Map<Integer, String> userMap = users.stream().collect(Collectors.toMap(User :: getId, u -> u.getName()));
  • 场景:有个User的List,需要将其放到HashMap里,key为用户ID,value为该User。User可能会重复,也就是ID会重复。按照上面的做法会导致如下错误:
Exception in thread "main" java.lang.IllegalStateException: Duplicate key 123456
/**
* 需要指定在key重复时选择保留旧值还是新值
*/

Map<Integer, User> userMap = users.stream().collect(Collectors.toMap(User :: getId, u -> u, (oldV, newV) -> newV));
  • 场景:有个User的List,需要按照id的大小进行排序
List<User> users = new ArrayList<User>();
users.sort((u1, u2) -> u1.getId().compareTo(u2.getId()));

后续遇到了其他场景再继续添加… …