java8 stream Collectors(收集)操作合集

  1. 分组操作:Collectors.groupingBy()
// 测试数据,请不要纠结数据的严谨性
List<TestVO> list = new ArrayList<>();
list.add(new TestVO(1,"李小明",18));
list.add(new TestVO(2,"李小明",19));
list.add(new TestVO(3,"王大朋",16));
list.add(new TestVO(4,"陈小跑",10));

// 分组并求count(counting方法返回所收集元素的总数)
Map<Integer, Long> sexCount = list.stream().collect(Collectors.groupingBy(TestVO::getName,Collectors.counting()));

// 分组并求sum(summing方法会对元素求和)
Map<Integer, Integer> ageCount = list.stream().collect(Collectors.groupingBy(TestVO::getName,Collectors.summingInt(TestVO::getAge)));

// 分组并求最大、最小值 (maxBy和minBy会接受一个比较器,求最大值,最小值)
Map<Integer, Optional<User>> ageMax =  list.stream().collect(Collectors.groupingBy(TestVO::getName,Collectors.maxBy(Comparator.comparing(TestVO::getAge))));

// 如果想一次操作直接完成求和、求count、求最大、求最小也可以(Collectors.summarizing(Int/Long/Double)就是为你准备的,它可以一次行获取前面的所有结果,其返回值为(Int/Long/Double)SummaryStatistics)
DoubleSummaryStatistics dss = list.stream().collect(Collectors.summarizingDouble((TestVOp)->p.age));
double average=dss.getAverage();
double max=dss.getMax();
double min=dss.getMin();
double sum=dss.getSum();
double count=dss.getCount();

// 分组并取只取对象中某一个元素集合(mapping函数会应用到downstream结果上,并需要和其他函数配合使用)
Map<Integer, List<String>> nameMap =  list.stream().collect(Collectors.groupingBy(TestVO::getName,Collectors.mapping(TestVO::getName,Collectors.toList())));

// 进行类型转换(long转string)
List<Long> idList= Arrays.asList(1L, null, 3L, null, 5L);
List<String> idStrList = idList.stream().map(String::valueOf).collect(Collectors.toList());
  1. 转Map操作:Collectors.toMap()
// 测试数据,请不要纠结数据的严谨性
List<TestVO> list = new ArrayList<>();
list.add(new TestVO(1,"李小明",18));
list.add(new TestVO(2,"李小明",19));
list.add(new TestVO(3,"王大朋",16));
list.add(new TestVO(4,"陈小跑",10));

// 转map
Map<Integer, Long> sexCount = list.stream().collect(Collectors.toMap(TestVO::getName,TestVO::getAge, (v1, v2) -> v1));

// 转value为对象的map
Map<Integer, TestVO> sexCount = list.stream().collect(Collectors.toMap(TestVO::getName,testVO -> testVO, (v1, v2) -> v1));

// 在转换成List
List<Param> paramList = map.keySet().stream()
                                    .map(key -> {
                                        Param param= new Param();
                                        param.setCmd(key);
                                        param.setParam(idAndAgeMap .get(key));
                                        return param;
                                     })
                                   .collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值