Flask接口签名sign原理与实例代码浅析
1187
2022-11-27
java8实现list集合中按照某一个值相加求和,平均值等操作代码
集合:
List
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
List
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
System.out.print("删除前:");
list.stream().forEach(item -> System.out.print(item));
Iterator
whileyZylbkdK (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
//过滤所有msg是b的记录
List
list2.stream().forEach(item -> System.out.println(item));
}
1.4.3 使用distinct去重
//使用distinct去重
List
distinctMsg.forEach(System.out::println);
1.4.4 使用toSet去重
//使用collect(toSet())去重
Set
distinctMsg2.forEach(System.out::println);
1.5 使用Java8对List排序
1.5.1 单个字段排序
private static void sortList(){
List
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
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.stream().map(Message::getId).collect(Collectors.toList());
1.6.1 List
//利用distinct()
List
list.stream().map(Message::getMsg).distinct().collect(Collectors.toList());
//利用Collectors.toSet()
Set
list.stream().map(Message::getMsg).collect(Collectors.toSet());
1.7 List
还是上面的测试数据,按Message的msg作为key,如果key重复就用第一个.
private static void listToMap(){
List
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
Map
groupByMsg.forEach((k, v) -> {
System.out.println(k + " -> " + v.toString());
});
返回如下:
a -> [Message(id=1, msg=a, sendTime=Frihttp:// 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
pigMapList.stream().collect(groupingBy(e -> e.get("gender").toString()));
1.10 List求和、求最大值、平均值
private static void statisticsList(){
List
//求和
Long sum= list.stream().mapToLong(Message::getId).sum();
System.out.println("sum = " + sum);
//求最大值
Optional
Long maxId = maxMassage.get().getId();
System.out.println("maxId = " + maxId);
LongSummaryStatistics lss = list.stream().collect(Collectors.summarizingLong(Message::gethttp://Id));
System.out.println("sum = " + lss.getSum());
System.out.println("max = " + lss.getMax());
System.out.println("min = " + lss.getMin());
System.out.println("avg = " + lss.getAverage());
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~