添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
谦逊的红豆  ·  Orillusion荣获SegmentFau ...·  2 月前    · 
曾深爱过的蛋挞  ·  【Kafka系列】4.1 ...·  1 年前    · 
聪明伶俐的鞭炮  ·  用 Matlab ...·  1 年前    · 
还单身的钢笔  ·  通过shell脚本替换节点·  1 年前    · 
首页 > 软件编程 > java > java8 list值相加求和平均值

java8实现list集合中按照某一个值相加求和,平均值等操作代码

作者:冯小胖 Mini胖

这篇文章主要介绍了java8实现list集合中按照某一个值相加求和,平均值等操作代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

List<User> user = new User();

user .stream().collect(Collectors.summingInt(User::getAge))

参数类型:

summarizingDouble 统计数据(double)状态, 其中包括count min max sum和平均值

summarizingInt 统计数据(int)状态, 其中包括count min max sum和平均值

summarizingLong 统计数据(long)状态, 其中包括count min max sum和平均值.

summingInt 求和 返回int类型

summingDouble 求和 返回double类型

summingLong 求和 返回long类型

counting 返回Stream的元素个数

averagingDouble 求平均值 返回double类型

averagingInt 求平均值 返回int类型

averagingLong 求平均值 返回long类型

maxBy 在指定条件下,返回最大值

minBy 在指定条件下,返回最小值

补充知识: Java8集合List排序、筛选、求和、求最大值、平均值、List转Map

Java8集合List排序、筛选

1. List

元素可重复

1.1 ArrayList

动态数组实现

增删慢(末尾处也快)

1.2 LinkedList

1.3 ArrayList和LinkedList比较

//返回一个List private static List<Message> getMessageList(){ List<Message> list = new ArrayList<>(); list.add(new Message(1L, "a", new Date())); list.add(new Message(2L, "b", new Date())); list.add(new Message(4L, "b", new Date())); list.add(new Message(3L, "c", new Date())); return list;

1.4.2 使用Iterator遍历List

private static void TestArrayList(){ List<Message> list = getMessageList(); System.out.print("删除前:"); list.stream().forEach(item -> System.out.print(item)); Iterator<Message> it = list.iterator(); while (it.hasNext()) { Message s = it.next(); if (s.getMsg().equals("b")) { it.remove(); System.out.print("\n删除后:"); list.stream().forEach(item -> System.out.print(item));

1.4.2 使用Java8对List过滤筛选

private static void filterList(){ List<Message> list1 = getMessageList(); //过滤所有msg是b的记录 List<Message> list2 = list1.stream().filter(s -> !s.getMsg().equals("b")).collect(Collectors.toList()); list2.stream().forEach(item -> System.out.println(item));

1.4.3 使用distinct去重

//使用distinct去重 List<String> distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList()); distinctMsg.forEach(System.out::println);

1.4.4 使用toSet去重

//使用collect(toSet())去重 Set<String> distinctMsg2 = list.stream().map(Message::getMsg).collect(toSet()); distinctMsg2.forEach(System.out::println);

1.5 使用Java8对List排序

1.5.1 单个字段排序

private static void sortList(){ List<Message> list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println("===排序前如下==="); list.stream().forEach(item -> System.out.println(item)); //根据Id升序排序 list.sort((a, b) -> a.getId().compareTo(b.getId())); //根据Id升序排序(简写) list.sort(Comparator.comparing(Message::getId)); //根据Id降序排序(简写) list.sort(Comparator.comparing(Message::getId).reversed()); System.out.println("===排序后如下==="); list.stream().forEach(item -> System.out.println(item));

1.5.2 多个字段组合排序

private static void sortList(){ List<Message> list = getMessageList(); if (list != null && !list.isEmpty()){ System.out.println("===排序前如下==="); list.stream().forEach(item -> System.out.println(item)); //根据多条件组合排序,先根据msg(升序),再根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId)); //根据多条件组合排序,先根据msg(升序),再根据id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Comparator.comparing(Message::getId).reversed())); //根据多条件组合排序,先根据msg(降序),再根据id(降序) list.sort(Comparator.comparing(Message:: getMsg).thenComparing(Message::getId).reversed()); //根据多条件组合排序,先根据msg(降序),再根据id(升序) list.sort(Comparator.comparing(Message:: getMsg).reversed().thenComparing(Message::getId)); System.out.println("===排序后如下==="); list.stream().forEach(item -> System.out.println(item));

1.6 List<T>转List<Object>

List<Long> idList =

list.stream().map(Message::getId).collect(Collectors.toList());

1.6.1 List<T>转List<Object> +去重

//利用distinct() List<String> msgList = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList()); //利用Collectors.toSet() Set<String> msgList2 = list.stream().map(Message::getMsg).collect(Collectors.toSet());

1.7 List<T>转Map<String, T>

还是上面的测试数据,按Message的msg作为key,如果key重复就用第一个.

private static void listToMap(){ List<Message> list = getMessageList(); Map<String, Message> map = list.stream().collect(Collectors.toMap(Message :: getMsg, a-> a, (k1, k2) -> k1)); System.out.println(map.size());

原本List有4个元素,因为有2条msg="b"的数据,转map后取第一条

1.7.1 forEach遍历Map

map.forEach((k,v) -> { System.out.println(k + " -> " + v);

1.8 List<T>转Map<String, List<T>>

Map<String, List<Message>> groupByMsg = list.stream().collect(groupingBy(Message::getMsg)); groupByMsg.forEach((k, v) -> { System.out.println(k + " -> " + v.toString());

返回如下:

a -> [Message(id=1, msg=a, sendTime=Fri May 15 17:36:30 CST 2020)] b -> [Message(id=2, msg=b, sendTime=Fri May 15 17:36:30 CST 2020), Message(id=4, msg=b, sendTime=Fri May 15 17:36:30 CST 2020)] c -> [Message(id=3, msg=c, sendTime=Fri May 15 17:36:30 CST 2020)]

1.9 List<Map<String, Object>>转Map<String, List<Map<String, Object>>>

Map<String, List<Map<String, Object>>> groupByGenderMap =

pigMapList.stream().collect(groupingBy(e -> e.get("gender").toString()));

1.10 List求和、求最大值、平均值

private static void statisticsList(){ List<Message> list = getMessageList(); Long sum= list.stream().mapToLong(Message::getId).sum(); System.out.println("sum = " + sum); //求最大值 Optional<Message> maxMassage = list.stream().collect(Collectors.maxBy(Comparator.comparing(Message::getId))); Long maxId = maxMassage.get().getId(); System.out.println("maxId = " + maxId); LongSummaryStatistics lss = list.stream().collect(Collectors.summarizingLong(Message::getId)); System.out.println("sum = " + lss.getSum()); System.out.println("max = " + lss.getMax()); System.out.println("min = " + lss.getMin()); System.out.println("avg = " + lss.getAverage());

以上这篇java8实现list集合中按照某一个值相加求和,平均值等操作代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • 如何在Spring Boot微服务使用ValueOperations操作Redis集群String字符串
    如何在Spring Boot微服务使用ValueOperations操作Redis集群String字符串
    2023-06-06
  • 深度解析Spring内置作用域及其在实践中的应用
    深度解析Spring内置作用域及其在实践中的应用
    2023-06-06
  • elasticsearch 8.2.3 安装及springboot简单使用
    elasticsearch 8.2.3 安装及springboot简单使用
    2023-06-06
  • 如何将jdk10降版本到jdk1.8
    如何将jdk10降版本到jdk1.8
    2023-06-06
  • mybatisPlus中批量删除的示例代码
    mybatisPlus中批量删除的示例代码
    2023-06-06
  • springboot3整合远程调用的过程解析
    springboot3整合远程调用的过程解析
    2023-06-06
  • SpringBoot整合SpringDataJPA的示例
    SpringBoot整合SpringDataJPA的示例
    2023-06-06
  • springboot乱码问题排查思路解析
    springboot乱码问题排查思路解析
    2023-06-06
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号