java8 stream操作
java8 stream操作
//获取对象集合中某字段的数字和(不会出现空指针) int = 集合对象.stream().mapToInt(集合的对象类名::某字段的get方法).sum() //向对象集合中所有对象放入同一字段值(不会出现空指针) 集合对象.forEach(函数对象(任意值) -> 函数对象.某字段的set方法(输入的值)); //获取对象集合中某些字段形成新的集合 List = 集合对象.stream().map(函数对象(任意值) -> new 集合的对象类名(函数对象.getUserName(),函数对象.getAge())).collect(Collectors.toList()); //查询对象集合中指定范围的对象形成新的集合(会出现空指针) List = 集合对象.stream().filter(函数对象(任意值) -> 条件).collect(Collectors.toList()); //查询对象集合中的某字段形成新的集合 List = 集合对象.stream().map(集合的对象类名::某字段的get方法).collect(Collectors.toList()); // 求最高值 Optional<Integer> 新的集合对象 = 集合对象.stream().map(集合的对象类名::对象的get方法).collect(Collectors.maxBy(Integer::compare)); // 将List集合转换为Map集合 // 注意key是唯一的,要注意他不会自动去掉重复key,而是抛出异常,我们需要手动处理 Map<String, String> 新的集合对象 = List集合对象.stream().collect(Collectors.toMap(List集合对象类名::对象的属性get方法(作为key), List集合对象类名::对象的属性get方法(作为value), (如果需要去重则添加(k1, k2) -> k2 表示后添加的key是否替换之前的key))) // 按照某字段不同分组 Map<String, List<集合的对象类名>> 新的集合对象 = 集合对象.stream().collect(Collectors.groupingBy(集合的对象类名::对象的get方法)); // 按照一定条件分组 Map<Boolean, List<集合的对象类名>> 新的集合对象 = 集合对象.stream().collect(Collectors.partitioningBy(函数对象(任意值) -> 判断条件)); //将集合内容串联成一个字符串 String string = 集合对象.stream().collect(Collectors.joining("串联的中间字符")); // 按某字段自然排序(正序) List<String> newList = 集合对象.stream().sorted(Comparator.comparing(集合的对象类名::被比较的对象的get方法)).map(集合的对象类名::转换导出字段的get方法).collect(Collectors.toList()); // 给Integer集合进行自然排序(正序) List<Integer> newList2 = 集合对象.stream().sorted(Comparator.comparing(Integer::intValue)).collect(Collectors.toList()) // 按某字段倒叙 List<String> newList3 = 集合对象.stream().sorted(Comparator.comparing(集合的对象类名::被比较的对象的get方法).reversed()).map(集合的对象类名::转换导出字段的get方法).collect(Collectors.toList()); // 先按工资再按年龄升序排序 List<String> newList4 = 集合对象.stream().sorted(Comparator.comparing(集合的对象类名::被比较的对象的get方法1).thenComparing(集合的对象类名::被比较的对象的get方法2)).map(集合的对象类名::转换导出字段的get方法).collect(Collectors.toList()); 提取对象集合某一字段(list 转list) List<String> codeList = MatePriceWhiteVoList.stream().map(MatePriceWhiteVo::getStoreCode).distinct().collect(Collectors.toList()); //其中 distinct()是去重 list 转换为 map //1.取某个字段为key 某个值为value Map<String, String> codeMap = listShopList.stream().filter(ObjectUtils::isNotEmpty).collect(Collectors.toMap(ShopReportVo::getCode, ShopReportVo::getName)); //其中 filter(ObjectUtils::isNotEmpty)是保留对象不为空的 //2.取某个字段为key 对象为value Map<String,ShopReportVo> map=listShopList.stream().collect(Collectors.toMap(ShopReportVo::getName,Function.identity())); //或者 Map<String,ShopReportVo> map=listShopList.stream().collect(Collectors.toMap(ShopReportVo::getName,shopReportVo -> shopReportVo)); //3.取某个字段为key 多个对象为value (根据key分组) Map<String,List<ShopReportVo>> map=listShopList.stream().collect(Collectors.groupingBy(ShopReportVo::getName)); 对list的操作(暂时只写了排序和过滤) List<ShopReportVo> codeList =listShopByCodes.getResult().stream() .filter(shopReportVo -> "A".equals(shopReportVo.getCode())) .sorted(Comparator.comparing(ShopReportVo::getPlatformShopId).reversed() .thenComparing(ShopReportVo::getName) .thenComparing(ShopReportVo::getTagName)) .collect(Collectors.toList()); //过滤filter() 保留 code为A的对象 //排序sorted() 根据platFormShopId 倒序排序 reversed()是取反(之前的排序全部翻过来,单个排序或者同正序同倒序可以当作排序用) 默认是正序 //thenComparing() 多个排序条件 如果第一个排序条件无法区分 则用后面的排序 //还有一种排序写法 (个人不太喜欢) // naturalOrder正排 reverseOrder倒排 //nullsFirst 正排,如果有null,则null在最前(如果是上述排序方式 出现null,会报错,加了就不会) // nullsLast 倒排,如果有null,则null在最后(与nullsFirst类似) List<ShopReportVo> codeList =listShopByCodes.getResult().stream() .filter(shopReportVo -> "A".equals(shopReportVo.getCode())) .sorted(Comparator.comparing(ShopReportVo::getPlatformShopId,Comparator.reverseOrder()) .thenComparing(ShopReportVo::getName, Comparator.naturalOrder())) .collect(Collectors.toList());