Collectors.toMap两层
时间: 2023-08-21 09:14:57 浏览: 113
Java中的`java.util.stream.Collectors.toMap()`方法有什么作用
引用\[1\]中提到了两种使用Collectors.toMap方法的方式,用于将一个列表转换为一个Map。第一种方式是将列表中的元素的某个属性作为键,元素本身作为值,示例代码如下:
```
Map<Integer, House> houseMap = houses.stream()
.collect(Collectors.toMap(House::getOwnerid, o -> o));
```
第二种方式是将列表中的元素的某个属性作为键,元素本身作为值,并使用Function.identity()方法作为值的映射函数,示例代码如下:
```
Map<Integer, House> houseMap1 = houses.stream()
.collect(Collectors.toMap(House::getOwnerid, Function.identity()));
```
引用\[2\]中提到了一种可能被视为不良做法的情况,即使用Map嵌套的方式来表示多层映射关系。例如,使用Map<String,Map<String,Map<String,List<Booker>>>>来表示多层分组关系。作者建议使用只有一个列表映射的方式,而不是多层映射的方式,将多个属性的组合作为键来进行分组。
引用\[3\]中提到了解决重复键的办法。当出现重复键时,可以选择保留前面的值或者后面放入的值,覆盖先前的值。示例代码如下:
```
houses.stream()
.collect(Collectors.toMap(House::getOwnerid, House::getHousename, (v1, v2) -> v2));
```
上述代码中,如果出现重复的键,将保留后面放入的值。如果想保留前面的值,则可以将(v1, v2) -> v1。
综上所述,Collectors.toMap方法可以用于将列表转换为Map,并提供了处理重复键的方式。
#### 引用[.reference_title]
- *1* *3* [Collectors.toMap应用](https://blog.csdn.net/gqltt/article/details/125528218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [java – 如何使用Collectors.groupingBy创建嵌套Map?](https://blog.csdn.net/weixin_39609622/article/details/115039568)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文