随笔 - 100  文章 - 50  trackbacks - 0
<2018年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

我收藏的一些文章!

搜索

  •  

最新评论

阅读排行榜

评论排行榜

常用方式

代码如下:

public Map<Long, String> getIdNameMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 

收集成实体本身map

代码如下:

public Map<Long, Account> getIdAccountMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getId, account -> account)); } 

account -> account是一个返回本身的lambda表达式,其实还可以使用Function接口中的一个默认方法代替,使整个方法更简洁优雅:

public Map<Long, Account> getIdAccountMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getId, Function.identity())); } 

重复key的情况

代码如下:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity())); } 

这个方法可能报错(java.lang.IllegalStateException: Duplicate key),因为name是有可能重复的。toMap有个重载方法,可以传入一个合并的函数来解决key冲突问题:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2)); } 

这里只是简单的使用后者覆盖前者来解决key重复问题。

指定具体收集的map

toMap还有另一个重载方法,可以指定一个Map的具体实现,来收集数据:

public Map<String, Account> getNameAccountMap(List<Account> accounts) {     return accounts.stream().collect(Collectors.toMap(Account::getUsername, Function.identity(), (key1, key2) -> key2, LinkedHashMap::new)); } 
 
转自:https://zacard.net/2016/03/17/java8-list-to-map/
posted on 2018-03-31 20:22 fly 阅读(192) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: