ouble
统计以上所有:summarizingInt
、summarizingLong
、summarizingDouble
List<Integer> list = Arrays.asList(1, 2, 3, 2, 5, 3, 9, 8, 7, 6, 29, 10, 22);
// count
long count = list.stream().filter(value -> value > 10).count();
log.info(String.format("list中元素>10的个数为:%d", count));
// average
Double average = list.stream().filter(value -> value > 1).collect(Collectors.averagingInt(Integer::intValue));
log.info(String.format("list中元素>1的元素平均值为:%.2f", average));
List<User> userList1 = Arrays.asList(
new User(1, "xww", "女", 22),
new User(2, "zgx", "男", 22),
new User(3, "whb", "男", 23),
new User(4, "gg", "男", 30),
new User(5, "yda", "男", 22),
new User(6, "bhm", "女", 23),
new User(7, "lsn", "女", 22),
new User(8, "ksj", "女", 22)
);
Double averageAge = userList1.stream()
.filter(user -> user.getSex().equals("男"))
.map(User::getAge)
.collect(Collectors.averagingInt(Integer::intValue));
log.info(String.format("男用户的平均年龄为:%d 岁", averageAge.intValue()));
// mapToInt
int ageSum = userList1.stream()
.filter(user -> user.getSex().equals("女"))
.mapToInt(User::getAge)
.sum();
log.info(String.format("女用户的年龄之和为:%d", ageSum));
// summarizingInt 统计 计数、总和、最小值、平均值、最大值
IntSummaryStatistics recording = userList1.stream()
.filter(user -> user.getSex().equals("男"))
.collect(Collectors.summarizingInt(User::getAge));
log.info(String.format("记录所有男用户的年龄各项值,结果为:%s", recording));
6.3 分组(partitioningBy/groupingBy)
- 分区:将
stream
按条件分为两个Map
,比如员工按薪资是否高于8000分为两部分。
- 分组:将集合分为多个Map,比如员工按性别分组。有单级分组和多级分组。
partitioningBy
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 20, 37, 49, 243, 30);
// partitioningBy
Map<Boolean, List<Integer>> collect1 = list.stream()
.collect(Collectors.partitioningBy(value -> value > 20));
log.info(String.format("元素值是否大于20进行分组,结果为:%s", collect1));
collect1.forEach((key, value) -> {
log.info(String.format("元素值是否大于20进行分组,结果为:%s:%s", key, value));
});
groupingBy
List<User> userList = Arrays.asList(
new User(1, "xww", "女", 22),
new User(2, "zgx", "男", 21),
new User(3, "whb", "男", 23),
new User(4, "gg", "男", 30),
new User(5, "yda", "男", 22),
new User(6, "bhm", "女", 23),
new User(7, "lsn", "女", 22),
new User(8, "ksj", "女", 22)
);
// groupingBy
Map<String, List<User>> collect2 = userList.stream()
.collect(Collectors.groupingBy(User::getSex));
log.info(String.format("根据性别对用户进行分组,结果为:%s", collect2));
collect2.forEach((key, user) -> {
log.info(String.format("根据性别对用户进行分组,结果为:%s:%s", key, user));
});
6.4 接合(joining)
joining
可以将stream中的元素用特定的连接符(没有的话,则直接连接)连接成一个字符串。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 20, 37, 49, 243, 30);
String collect = list.stream()
.map(Object::toString)
.collect(Collectors.joining("——&qu