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 map){
        return (String) map.get("Key1");
    }
	
	private static String comparingByKey2(Map map){
        return (String) map.get("Key2");
 }
private static String comparingByKey3(Map map){ return map.get("Key3").toString(); } private static String comparingByKey4(Map map){ return map.get("Key4").toString(); } private static String comparingByKey5(Map 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 map = new HashMap();
                    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

你可能感兴趣的:(java 8 stream 流操作list (不断更新)