业务中碰到需要两个字段分组取值场景, 常见的两种解决方案, 第一种是直接sql语句group by分组, 第二种sream流循环嵌套
Collectors.groupingBy
进行分组, 再循环取值, 较为麻烦;
参考他人采用
org.apache.commons.lang3.tuple.Pair
类进行两字段分组取值, 代码如下:
Map<Pair<Long, BigDecimal>, Long> map = agentWriteOffGoodsList.stream()
.collect(Collectors.groupingBy(p -> Pair.of(p.getCorporateUserId(), p.getPrice()), Collectors.counting()));
LinkedList<Map.Entry<Pair<Long, BigDecimal>, Long>> list = new LinkedList<>(map.entrySet());
list.sort(Comparator.comparing(o -> o.getKey().getKey()));
list.forEach(o -> {
corporateUserIdList.add(o.getKey().getKey());
priceList.add(o.getKey().getValue());
amountList.add(o.getValue().intValue());
});
总共取出了三个数据排序后放到对应list集合, 如果取出更多值, 可以将Collectors.counting()去掉
本文探讨了在业务场景中如何通过Apache Commons Lang的Pair类简化两字段分组取值,使用stream API和Collectors.groupingBy进行高效计数,同时展示了如何将结果整理到多个有序列表中。



667

被折叠的 条评论
为什么被折叠?



