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