lambda java 实例 - 循环集合数据操作目标值
源代码
//pooo 是一个复合vo 代表一组数据的集合,内部包含其他vo和list,代码的目的是循环vo内部的数据 选出符合条件的特定数据 Map<Long,List<String>> paaaaaMap= pooo.getpaaaaas().stream().filter(paaaaa -> paaaaa.getcooooooos()!=null).filter(paaaaa-> paaaaa.getpooorrrrs()!=null).filter(paaaaa-> paaaaa.getpooorrrrs().stream(). anyMatch(pooorrrr -> Arrays.asList(fbbbbrolesArray).contains(pooorrrr.getpaaaaaRole()))). filter(paaaaa -> paaaaa.getcooooooos().stream().filter(Objects::nonNull).anyMatch(cooooooo -> cooooooo.getContactType() == 777&& cooooooo.getcooooooo()!=null&&!cooooooo.getcooooooo().trim().isEmpty())). collect(Collectors.toMap(paaaaa::getpaaaaaOID, paaaaa->paaaaa.getpooorrrrs().stream().map(pooorrrr::getpaaaaaRole).collect(Collectors.toList()))); // 二次循环的目的是用map数据作为key获取外部数据 Map<String,String> alertMap= paaaaaMap.entrySet().stream().collect(Collectors.toMap(paaaaa->(String)hashmap.get(paaaaa.getKey()+"CCCCNUM"), paaaaa->paaaaa.getValue().stream().reduce((one,tow)-> one+=tow).get()));
分解
//pooo 是一个复合vo 代表一组数据的集合,内部包含其他vo和list,代码的目的是循环vo内部的数据 选出符合条件的特定数据 Map<Long,List<String>> paaaaaMap= pooo.getpaaaaas().stream() //获取二层vo 并stream化
.filter(paaaaa -> paaaaa.getcooooooos()!=null).filter(paaaaa-> paaaaa.getpooorrrrs()!=null) //第三层list校验
.filter(paaaaa-> paaaaa.getpooorrrrs().stream(). //这里用filter检验 anymatch里返回的布尔类型数据 anyMatch(pooorrrr -> Arrays.asList(fbbbbrolesArray).contains(pooorrrr.getpaaaaaRole()))).//anymatch 返回一组循环里是否有一个符合,有就是true filter(paaaaa -> paaaaa.getcooooooos().stream().filter(Objects::nonNull).anyMatch(cooooooo -> cooooooo.getContactType() == 777&& cooooooo.getcooooooo()!=null&&!cooooooo.getcooooooo().trim().isEmpty())).//这里过滤的是三层list里的四层vo数据 collect(Collectors.toMap(paaaaa::getpaaaaaOID, paaaaa->paaaaa.getpooorrrrs().stream().map(pooorrrr::getpaaaaaRole).collect(Collectors.toList())));//最后合成map // 二次循环的目的是用map数据作为key获取外部数据 Map<String,String> alertMap= paaaaaMap.entrySet().stream().collect(Collectors.toMap(paaaaa->(String)hashmap.get(paaaaa.getKey()+"CCCCNUM"), paaaaa->paaaaa.getValue().stream().reduce((one,tow)-> one+=tow).get()));//reduce拼接循环数据