java8、lamda、list分组转map,并且value只保留一个

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;
}

猜你喜欢

转载自blog.csdn.net/qq_41611676/article/details/141900667