lambda表达式有多好用!马上告诉你

134 阅读1分钟

 一、转换成Map

Map<String, TestJava8VO> map = list.stream().collect(Collectors.toMap(p -> p.getId(), p -> p));

二、转换成Map

Map<String, String> map = list.stream().collect(Collectors.toMap(p -> p.getId(), p -> p.getName()));

三、转换成Map

opList.stream().collect(Collectors.groupingBy(DeviceDto::getDeviceCode,Collectors.mapping(DeviceDto::getDeviceName,Collectors.toList())));

四、遍历集合list,根据某一字段的判断条件,获取符合条件的新集合

List<TestJava8VO> newList = list.stream().filter(vo -> vo.getSort() > 1).collect(Collectors.toList());

五、条件判断,生成新的List集合

List<String> idList = list.stream().filter(p->AssertUtil.isEmpty(p.getId())).map(p -> p.getId()).collect(Collectors.toList());

六、条件判断,生成新的Set集合

Set<String> idSet = list.stream().filter(p->AssertUtil.isEmpty(p.getId())).map(TestJava8VO :: getId).collect(Collectors.toSet());

七、排序,正序

list.sort(Comparator.comparing(TestJava8VO :: getSort));

八、排序,倒序

list.sort(Comparator.comparing(TestJava8VO :: getSort).reversed());

九、获取符合条件的元素对象,如果不存在返回null,用orElese

TestJava8VO vo = list.stream().filter(o -> o.getId() == "1").findAny().orElse(null); List<String> extraWbIds = Optional.ofNullable(SecurityUtils.getDsfUserEntity().getRoleAppMaps()).map(e ->e.get(RoleAppTypeEnum.WORKBENCH_APP)).orElse(Collections.emptyList());

十、遍历List,对某字段进行赋值

list.stream().filter(p->AssertUtil.isEmpty(p.getId())).forEach(s->s.setId("123"));

十一、分组   Collectors.groupingBy(属性名)

Map<Integer, List<TestJava8VO>> map3 = list.stream().collect(Collectors.groupingBy(TestJava8VO :: getSort)); Map<String, List<String>> addProjectMemberMap = addList.stream() .collect(Collectors.groupingBy(ResourceAuthSaveDTO::getProjectId, Collectors.mapping(ResourceAuthSaveDTO::getPrincipalId, Collectors.toList())));

十二、交集

List<String> list3 = list1.stream().filter(item -> list2.contains(item)).collect(toList());

十三、差集 (list1 - list2)

List<String> list3 = list1.stream().filter(item -> !list2.contains(item)).collect(toList());

十四、差集 (list2 - list1)

List<String> list3 = list2.stream().filter(item -> !list1.contains(item)).collect(toList());

十五、获取某一字段值最小的对象

TestJava8VO minSort = list.stream().min(Comparator.comparing(TestJava8VO :: getSort)).get();

十六、获取该集合list某一字段值的总和

mapToInt-》字段是int 
mapToDouble-》字段是Double 
sum()-》求和 
max()-》最大值 
min()-》最小值 
average()-》平均值 
int sum = list.stream().mapToInt(vo -> vo.getSort()).sum();

十七、根据某一属性去重方法

若使用以下方式,若map中的key有重复的,会报错

Map map = list.stream().collect(Collectors.toMap(p -> p.getId(), p -> p));

可改为

继续用旧的,旧的:vo1

Map pageDataMap = pageData.stream().collect(Collectors.toMap(TestJava8VO::getId, Function.identity(), (vo1, vo2) -> vo1));

用新的替代旧的, 新的:vo2

Map pageDataMap = pageData.stream().collect(Collectors.toMap(TestJava8VO::getId, Function.identity(), (vo1, vo2) -> vo2));

或者 

userList = userList.stream().collect(Collectors.collectingAndThen (Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User :: getUserid))), ArrayList::new));

十八、按list集合中的某个属性分组,且有序,用LinkedHashMap

LinkedHashMap<String, List<ICBmEvaluationScore>> mapScore = icBmEvaluationScoreList.stream() .collect(Collectors.groupingBy(ICBmEvaluationScore::getEvaluationDetailNumber, LinkedHashMap::new, Collectors.toList()));