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());
        }

如果对你有帮助,请麻烦点赞收藏支持下,谢谢

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8中,可以使用Stream API和Lambda表达式将List换为Map。下面是一个简单的示例: ```java import java.util.*; import java.util.stream.*; public class ListToMapExample { public static void main(String[] args) { // 创建一个包含元素的List List<String> list = Arrays.asList("Apple", "Banana", "Cherry", "Date"); // 使用stream和lambda表达式将List换为Map Map<String, Integer> map = list.stream() .collect(Collectors.toMap(Function.identity(), String::length)); // 输出结果 System.out.println(map); // 输出: {Apple=5, Banana=6, Cherry=6, Date=4} } } ``` 在这个例子中,我们使用了`Collectors.toMap()`方法,它接受两个参数:一个键生成函数和一个值收集器。键生成函数用于从元素中提取键,值收集器用于将元素值收集到Map中。在这个例子中,我们使用`Function.identity()`作为键生成函数,这会返回每个元素的原始值作为键。我们还使用`String::length`作为值收集器,它返回每个元素的长度作为值。 注意,如果列表中有重复的键,那么在换后的Map中,这些键的值将是它们最后一次出现的值。如果你希望保留所有出现过的键及其对应的值,那么你需要使用一个不同的方法来处理这个问题。 在Java 8中实现更复杂的Map操作(例如过滤键或值,或添加新的键-值对),可能需要使用额外的函数和Lambda表达式。你可以查看Java 8 Stream API文档以获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值