java 8 stream list 对象 转map


List<Person> list = new ArrayList<>();

1.对象中的属性转map 通过Collectors.toMap

list.stream().collect(Collectors.toMap(Person::getId,Person::getName));


2.收集对象本身
list.stream().collect(Collectors.toMap(Person::getId,list->list));

list->list 是一个返回本身的lambda表达式,还可以用function接口中的一个默认方法Function.identity(),返回对象本身
list.stream().collect(Collectors.toMap(Person::getId,Function.identity()));

3.key重复的情况,key有可能重复,会跑出异常:java.lang.illegalStateException:Duplicate key.这时候就要在toMap
方法指定当前key冲突时key的选择,这里时第二个key覆盖第一个key
list.stream().collect(Collectors.toMap(Person::getName,Function.identity(),(key1,key2)->key2));

4.根据一个字段或者属性分组也可以直接用groupingby方法

list.list(100).collect(Collectors.groupingBy(Person::getAge));

通过partitioningBy 进行分组
list.limit(100).collect(Collectors.partitioningBy(p-P.getAge()<18));

 

posted @ 2020-09-08 15:16  啦啦拉扎尔  阅读(13565)  评论(0编辑  收藏  举报