public class Demo{
public static void main(String[] args) {
List<Item> list= List.of(
new Item("key1", "value1"),
new Item("key2", "value2"),
new Item("key1", "value3"));
//方法1:使用groupBy 分组功能,遍历取第一个
Map<String, List<Item>> collect = list.stream().collect(Collectors.groupingBy(Item::getKey));
collect.forEach((k, v) -> {
v.get(0);
});
//方法2:使用toMap + Function.identity() 这个情况必须确保k只对应一个value,不然会报错
Map<String, Item> collect1 = list.stream().collect(Collectors.toMap(Item::getKey, Function.identity()));
//方法3:使用toMap + Function.identity() + 策略 , 意思就是如果k对应多个item取第一个
Map<String, Item> collect3 = list.stream().collect(Collectors.toMap(Item::getKey, Function.identity(), (a, c) -> a));
}
}
@Data
class Item {
private String key;
private String value;
}
java8、lamda、list分组转map,并且value只保留一个
于 2024-09-04 18:13:28 首次发布