java 8 stream 流操作list (不断更新

最近stream操作list用的特别爽,但是网上介绍复杂点的流操作并没有太多资料,介于我稍有研究,想把一些流的操作记录一下,以后参考


1,对list进行多key排序

list = list.stream().sorted(
                Comparator.comparing(StreamService :: comparingByKey1)
                .thenComparing(StreamService:: comparingByKey2)
                .thenComparing(StreamService:: comparingByKey3)
                .thenComparing(StreamService:: comparingByKey4)

                .thenComparing(StreamService:: comparingByKey5)).collect(Collectors.toList());

StreamService  里需要声明的方法

	private static String comparingByKey1(Map<String, Object> map){
        return (String) map.get("Key1");
    }
	
	private static String comparingByKey2(Map<String, Object> map){
        return (String) map.get("Key2");
 }
private static String comparingByKey3(Map<String, Object> map){ return map.get("Key3").toString(); } private static String comparingByKey4(Map<String, Object> map){ return map.get("Key4").toString(); } private static String comparingByKey5(Map<String, Object> map){ return map.get("Key5").toString(); }

这样,list会从key1 - key5依次升序排序,


2 .list多项分组并合计某项

list = list.stream().collect(
                            Collectors.groupingBy(d -> String.format("%s||%s||%s||%s||%s", d.get("key1"), d.get("key2") , d.get("key3"),
                                    d.get("key4") , d.get("key5")) ,
                                    Collectors.summingDouble(d -> Double.parseDouble((String)d.get("quantity")))
            )).entrySet().stream().map(entry -> {
                    Map<String, Object> map = new HashMap<String, Object>();
                    String[] keys = entry.getKey().split("\\|\\|");
                    map.put("1", keys[0]);
                    map.put("2", keys[1]);
                    map.put("3", keys[2]);
                    map.put("4", keys[3]);
                    map.put("5", keys[4]);
                    map.put("6", entry.getValue());
                    return map;
            }).collect(Collectors.toList());

这样操作,会先把list 按key1 - key5分组并合计quantity

最终整合list  输出  list

1= key1

2= key2

3= key3

...

来获取到一个新的list

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值