java stream 分组求和_Java stream List 求和、分组操作
Java stream List 求和、分組操作
前言
項目中經常會使用Stream操作一些集合數據,今天記錄一下我經常使用的Stream操作
求和操作public?static?void?main(String[]?args)?{
List?users?=?generateUserList();int?reduce?=?users.stream().mapToInt(x?->?x.getSalary().intValue()).reduce(0,?Integer::sum);
log.info("Int?sum?-?{}",?reduce);
BigDecimal?reduce1?=?users.stream().map(User::getSalary).reduce(BigDecimal.ZERO,?BigDecimal::add);
log.info("BigDecimal?sum?-?{}",?reduce);
}private?static?List?generateUserList()?{
List?users?=?new?ArrayList<>();for?(int?i?=?0;?i?
users.add(new?User((long)?(i?+?1),?StrFormatter.format("用戶-{}",?i),?RandomUtil.randomBigDecimal(new?BigDecimal(1000),?new?BigDecimal(100000))));
}return?users;
}復制代碼
結果:16:03:32.966?[main]?INFO?com.springboot.example.stream.StreamTest?-?Int?sum?-?31128616:03:32.977?[main]?INFO?com.springboot.example.stream.StreamTest?-?BigDecimal?sum?-?311286復制代碼
這里使用了Integer 及BigDecimal類型的求和,其他的例如Long Double類型的自行嘗試,操作都是一樣的。
分組操作Map>?groups?=?users.stream().collect(Collectors.groupingBy(User::getName,?Collectors.toList()));復制代碼
結果16:19:24.018?[main]?INFO?com.springboot.example.stream.StreamTest?-?groups?-?{"用戶-0":[{"name":"用戶-0","id":1,"salary":44133.974869422615}],"用戶-1":[{"name":"用戶-1","id":2,"salary":32433.52878974182}],"用戶-4":[{"name":"用戶-4","id":5,"salary":26726.1799749091}],"用戶-2":[{"name":"用戶-2","id":3,"salary":83274.99312309967}],"用戶-3":[{"name":"用戶-3","id":4,"salary":1579.9248811900475}]}復制代碼
自定義分組的數據結構List?groupCustomize?=?users.stream().collect(Collectors.groupingBy(User::getName,?Collectors.toList())).entrySet().stream().map(e?->?{
Map?newObj?=?new?HashMap<>();
newObj.put("name",?e.getKey());
newObj.put("items",?e.getValue());return?newObj;
}).collect(Collectors.toList());復制代碼
結果16:24:23.554?[main]?INFO?com.springboot.example.stream.StreamTest?-?groups?customize?-?[{"name":"用戶-0","items":[{"name":"用戶-0","id":1,"salary":69329.43639757435}]},{"name":"用戶-1","items":[{"name":"用戶-1","id":2,"salary":14632.879595342842}]},{"name":"用戶-4","items":[{"name":"用戶-4","id":5,"salary":52953.301688394306}]},{"name":"用戶-2","items":[{"name":"用戶-2","id":3,"salary":29500.813638173757}]},{"name":"用戶-3","items":[{"name":"用戶-3","id":4,"salary":30750.353923258994}]}]復制代碼
總結
以上是生活随笔為你收集整理的java stream 分组求和_Java stream List 求和、分组操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux实验室(在线linux实验室)
- 下一篇: 徐州房产备案查询网上查询系统(徐州房产备