前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java8 Stream API

Java8 Stream API

作者头像
小四的技术之旅
发布2022-07-26 17:02:29
3670
发布2022-07-26 17:02:29
举报
文章被收录于专栏:小四的技术文章

今天来分享一下Java8的Stream API,Stream API可以是我们的代码写起来更加整洁,丝滑,在对数据筛选,处理等方面有很好的帮助,下面我们通过一个简单的案例来看一下使用Stream API的强大之处。

下面是一个简单的筛选,我们需要筛选出年龄小于25岁,性别为男的所有人员,如果没有使用Stream API,那么我相信多数人肯定会这样去写。

代码语言:javascript
复制
List<User> userList = new ArrayList<>();
for (User user : list) {
    if (user.getAge() < 25 && user.getSex().equals("男"))
      userList.add(user);
}

使用了Stream API后,代码是这样的

代码语言:javascript
复制
List<User> users = list.stream()
        .filter(user -> user.getAge() < 25 && user.getSex().equals("男"))
        .collect(Collectors.toList());

是不是感觉一下就变得丝丝滑滑的了,没有if判断,也没有for循环,简直丝滑得不要脸,基于上面的list集合,我们来做一些操作。

filter过滤

通过filter,我们对数据进行过滤操作,如下筛选出年龄为23的所有女生

代码语言:javascript
复制
List<User> collect = list.stream().filter(user -> user.getAge() == 23).collect(Collectors.toList());

排序

通过sorted进行排序,根据人员的年龄进行排序

代码语言:javascript
复制
List<User> userList = list.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toList());

去重

通过distinct进行去重,

代码语言:javascript
复制
 List<User> userList = list.stream().distinct().collect(Collectors.toList());
代码语言:javascript
复制
IntSummaryStatistics 

使用IntSummaryStatistics可以得到数据条数,总和,最小值,平均值,最大值

代码语言:javascript
复制
IntSummaryStatistics collect = list.stream().collect(summarizingInt(User::getAge));
代码语言:javascript
复制
IntSummaryStatistics{count=10, sum=265, min=22, average=26.500000, max=31}

最大值最小值

代码语言:javascript
复制
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());

平均值

代码语言:javascript
复制
Double collect = list.stream().collect(averagingInt(User::getAge));
System.out.println(collect);

求和

代码语言:javascript
复制
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限制数据数目

代码语言:javascript
复制
List<User> users = list.stream().limit(2).collect(Collectors.toList());

将集合的某个值作为key,转换为map

代码语言:javascript
复制
Map<String, List<User>> collect2 = list.stream().collect(groupingBy(User::getUsername));

如上将name作为key,将List转换为Map,转换前后对比

代码语言:javascript
复制
转换前:[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=男)]}

还有很多实用的方法,就不一一列举,大家有空可以去自己探索

今天的分享就到这里,感谢你的观看,我们下期再见

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘牌 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档