java8 list 转Map的各种写法

java8 list 转Map:
1.1 public Map<Long, Account> getIdAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account));
}
▲ account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法 Function.identity(),这个方法返回自身对象,更加简洁:

1.2 重复key的情况。(key 不是主键)
在list转为map时,作为key的值有可能重复,这时候流的处理会抛出个异常:Java.lang.IllegalStateException:Duplicate key。
这时候就要在toMap方法中指定当key冲突时key的选择。(这里是选择第二个key覆盖第一个key):
public Map<String, Account> getNameAccountMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2));
}    
1.3 Map<Long, ExamUserAnswerDetailEntity> examUserAnswerDetailMap = examUserAnswerDetails.stream()
                .collect(HashMap::new,(m,s)->m.put(s.getQuestionId(),s),HashMap::putAll);
            
2. public Map<Long, String> getIdNameMap(List<Account> accounts) {
    return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername));
}

3. Map<Long, List<ExamUserAnswerDetailEntity>> ExamUserAnswerDetailEntityMap = list.stream().collect(groupingBy(ExamUserAnswerDetailEntity::getAnswerId));                
   Map<Long, List<ExamUserAnswerEntity>> examUserAnswerEntityMap = examUserAnswerEntityList.stream().collect(Collectors.groupingBy(ExamUserAnswerEntity::getExamId));

java8 获取列表中某字段组成新的list:

List<Long> examIds = examUserEntities.stream().map(ExamUserEntity::getExamId).collect(Collectors.toList());

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值