List
map和reduce
map用来归类,结果一般是一组数据,比如可以将list中的学生分数映射到一个新的stream中。 reduce用来计算值,结果是一个值,比如计算最高分。
编码
list转map
List<ResourceDeptListResponse> responses = deptHandler.deptList(listRequest); Map<Integer, String> deptMap = responses.stream().collect(Collectors.toMap(ResourceDeptListResponse::getDeptID, ResourceDeptListResponse::getDeptName));
Map<Integer, ResourceStaffResponse> staffMap = staffHandler.staffList(staffListRequest).stream().collect(Collectors.toMap(ResourceStaffResponse::getStaffID, a -> a, (k1, k2) -> k1)) //其中a->a表示放入的是对象,后面表示不能重复,如果重复了则默认使用第一个
Map<Integer,List<ResourcePersonWork>> personWorkMap=personWork.stream().collect(Collectors.groupingBy(ResourcePersonWork::getPersonID));
list中对象某一个字段(求和,最大值,最小值,平均值)
list.stream().map(e -> e.getSignInCount()).reduce(Integer::sum).get();
过滤(将孩子结点为空的过滤出来)
List<ResourceDeptPageResponse> collectNoparent=collect.stream().filter(s->ObjectUtils.isEmpty(s.getChildren())).collect(Collectors.toList())
分类统计数量
Map<Integer,Long> map = listfilter.stream().collect(Collectors.groupingBy(ResourcePersonState::getSignInStateEnum,Collectors.counting()));
list中将对象按某属性分类,并且取每类中某属性最大的一个
Map<Integer,ResourceDeptPageResponse> map = list.parallelStream().collect( Collectors.groupingBy(ResourceDeptPageResponse::getDeptID, Collectors.collectingAndThen( Collectors.reducing((a,b)->a.getOfficeNumber()> b.getOfficeNumber()?a:b),Optional::get) ) );
去重
List<ResourcePerson> people = persons.stream().distinct().collect(Collectors.toList());
分组:
//按照多个属性分组,key为多个属性合
Map<String,List<E>> result=list.stream.collect(Collectors.groupingBy(e -> e.getName() + e.getAge()));
//按照多个属性分组,key为单个属性合
Map<String,Map<String,List<Student>>> result=
list.stream.collect(Collectors.groupingBy(Student::getName, Collectors.groupingBy(Student::getAge)));