java8常见的List转Map的方法
【前言】以下是我在项目中常用到stream api 方法,list转map,以及分组,去重,合并等
// 实体类
@Data
@AllArgsConstructor
public class User {
// 用户id和姓名
private Integer userId;
private String userName;
// 用户所在的部门id和部门名称
private String deptId;
private String deptName;
}
// 添加测试数据
public class ListTest {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User(1001, "小明", "001", "一年级"));
list.add(new User(1002, "小王", "001", "一年级"));
list.add(new User(2001, "小美", "002", "二年级"));
list.add(new User(2002, "小王", "002", "二年级"));
// TODO 单独列举在下面出来
}
}
1.根据部门分组,将同部门的人信息合并
Map<String, List<User>> userListMap = list.stream().collect(Collectors.groupingBy(p -> p.getDeptId()));
Map<String, List<User>> userListMap2 = list.stream().collect(Collectors.groupingBy(User::getDeptId));
//【根据多个字段分组】
Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(p -> p.getUserId() + p.getUserName()));
2.根据部门分组,将同部分所有人名合并成集合
Map<String, List<String>> deptToUserNameMap = list.stream().collect(Collectors.
groupingBy(User::getDeptName,Collectors.mapping(User::getUserName, Collectors.toList())));
3.根据 userId -> deptId/deptName 转成map集合
Map<Integer, String> userToDeptIdMap = list.stream().collect(Collectors.toMap(p -> p.getUserId(), p -> p.getDeptId()));
Map<Integer, String> userToDeptNameMap = list.stream().collect(Collectors.toMap(User::getUserId, User::getDeptName));
4.每个userId 对应一个用户信息
Map<Integer, User> userMap = list.stream().collect(Collectors.toMap(User::getUserId, p -> p));
5. 获取所有员工的姓名userName(dictinct 去重复)
List<String> userNameList = list.stream().map(User::getUserName).distinct().collect(Collectors.toList());
List<String> userNameList2 = list.stream().map(p -> p.getUserName()).distinct().collect(Collectors.toList());
6.根据userId和userName去重
List<User> users= list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
new TreeSet<>(Comparator.comparing(p -> p.getUserId() + p.getUserName()))), ArrayList::new));
7.根据List集合转换为List集合
// 从数据库中查询出的对象集合
List<User> userList = new ArrayList<>();
// 判端是否为空
if (CollectionUtils.isNotEmpty(userList)) {
List<UserVO> UserVOs = userList.stream().map(user -> {
UserVO userVO = new UserVO();
userVO.setName(user.getName());
// ... 省略其余的字段
return userVO ;
}).collect(Collectors.toList());
}
如果对你有帮助,请麻烦点赞收藏支持下,谢谢