今天来分享一下Java8的Stream API,Stream API可以是我们的代码写起来更加整洁,丝滑,在对数据筛选,处理等方面有很好的帮助,下面我们通过一个简单的案例来看一下使用Stream API的强大之处。
下面是一个简单的筛选,我们需要筛选出年龄小于25岁,性别为男的所有人员,如果没有使用Stream API,那么我相信多数人肯定会这样去写。
List<User> userList = new ArrayList<>();
for (User user : list) {
if (user.getAge() < 25 && user.getSex().equals("男"))
userList.add(user);
}
使用了Stream API后,代码是这样的
List<User> users = list.stream()
.filter(user -> user.getAge() < 25 && user.getSex().equals("男"))
.collect(Collectors.toList());
是不是感觉一下就变得丝丝滑滑的了,没有if
判断,也没有for
循环,简直丝滑得不要脸,基于上面的list集合,我们来做一些操作。
filter过滤
通过filter
,我们对数据进行过滤操作,如下筛选出年龄为23的所有女生
List<User> collect = list.stream().filter(user -> user.getAge() == 23).collect(Collectors.toList());
排序
通过sorted
进行排序,根据人员的年龄进行排序
List<User> userList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());
去重
通过distinct
进行去重,
List<User> userList = list.stream().distinct().collect(Collectors.toList());
IntSummaryStatistics
使用IntSummaryStatistics可以得到数据条数,总和,最小值,平均值,最大值
IntSummaryStatistics collect = list.stream().collect(summarizingInt(User::getAge));
IntSummaryStatistics{count=10, sum=265, min=22, average=26.500000, max=31}
最大值最小值
Optional<Integer> max = list.stream().map(User::getAge).max(Integer::compareTo);
System.out.println(max.get());
Optional<Integer> min = list.stream().map(User::getAge).min(Integer::compareTo);
System.out.println(min.get());
平均值
Double collect = list.stream().collect(averagingInt(User::getAge));
System.out.println(collect);
求和
int sum = list.stream().mapToInt(User::getAge).sum();
System.out.println(sum);
Integer reduce = list.stream().map(User::getAge).reduce(0, Integer::sum);
System.out.println(reduce);
limit限制数据数目
List<User> users = list.stream().limit(2).collect(Collectors.toList());
将集合的某个值作为key,转换为map
Map<String, List<User>> collect2 = list.stream().collect(groupingBy(User::getUsername));
如上将name作为key,将List转换为Map,转换前后对比
转换前:[User(no=0, username=流派:0, age=22, sex=男), User(no=1, username=流派:1, age=23, sex=男), User(no=2, username=流派:2, age=24, sex=男)]
转换后:{0=[User(no=0, username=流派:0, age=22, sex=男)], 1=[User(no=1, username=流派:1, age=23, sex=男)], 2=[User(no=2, username=流派:2, age=24, sex=男)]}
还有很多实用的方法,就不一一列举,大家有空可以去自己探索
今天的分享就到这里,感谢你的观看,我们下期再见