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

集合:

List 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比较

实现

查询

增删

线程安全?

ArrayList

动态数组

慢(末尾处也快)

不安全

LinkedList

链表

不安全

ArrayList:

它的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍。

LinkedList:

底层实现是双向链表。

在增加和删除元素时效率较高。

1.4 List过滤指定元素

1.4.1 准备待测试的List

public class Message {

private Long id; //id

private String msg; //消息

private Date sendTime; //时间戳

//省略get set

}

//返回一个List

private static List getMessageList(){

List 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 list = getMessageList();

System.out.print("删除前:");

list.stream().forEach(item -> System.out.print(item));

Iterator it = list.iterator();

while (it.hasNext()) {

Message s = it.next();

if (s.getMsg().equals("b")) {

it.remove();

}

}

System.out.print("

删除后:");

list.stream().forEach(item -> System.out.print(item));

}

1.4.2 使用Java8对List过滤筛选

private static void filterList(){

List list1 = getMessageList();

//过滤所有msg是b的记录

List 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 distinctMsg = list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());

distinctMsg.forEach(System.out::println);

1.4.4 使用toSet去重

//使用collect(toSet())去重

Set 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 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 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转List

List idList =

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

1.6.1 List转List +去重

//利用distinct()

List msgList =

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

//利用Collectors.toSet()

Set msgList2 =

list.stream().map(Message::getMsg).collect(Collectors.toSet());

1.7 List转Map

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

private static void listToMap(){

List list = getMessageList();

Map map =

list.stream().collect(Collectors.toMap(Message :: getMsg, a-> a, (k1, k2) -> k1));

System.out.println(map.size());

}

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

54d62027380ed4d953f85f1a6d660095.png

1.7.1 forEach遍历Map

map.forEach((k,v) -> {

System.out.println(k + " -> " + v);

});

1.8 List转Map>

Map> 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>>

Map>> groupByGenderMap =

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

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

private static void statisticsList(){

List list = getMessageList();

//求和

Long sum= list.stream().mapToLong(Message::getId).sum();

System.out.println("sum = " + sum);

//求最大值

Optional 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集合中按照某一个值相加求和,平均值等操作代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/F_Z_S/article/details/103510180

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值