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

Java8 Stream 真香,赶紧来舔一舔

作者头像
小柒2012
发布2020-04-23 17:38:56
4080
发布2020-04-23 17:38:56
举报
文章被收录于专栏:IT笔记IT笔记

如今Java14已经发布许久了,Java15也在路上跑着了,然鹅不少小伙伴Java8API应该还没用溜吧!今天跟各位小伙伴们聊聊Java Stream API的具体使用方法以及应用场景。

举哥简单的例子,定义一个数组:

代码语言:javascript
复制
String[] users = new String[]{"张三","李四","王二"};

我们来使用之前的方式遍历:

代码语言:javascript
复制
for(int i=0;i<users.length;i++){
    System.out.println(users[i]);
}

亦或者使用:

代码语言:javascript
复制
for(String u:users){
   System.out.println(u);
}

使用最新的API实现方式:

代码语言:javascript
复制
Stream<String> stream = Stream.of(users);
stream.forEach(user-> System.out.println(user));

然鹅好像并没有多么方便,仅仅少撸了一行代码,下面跟大家分享一个稍微复杂一点的例子。

首先定义一个学生类:

代码语言:javascript
复制
@Data
@Builder
public class Student {
    private String name;
    private Integer age;
    private Integer sex;
    private Double score;
}

定义基础数据:

代码语言:javascript
复制
List<Student> list = new ArrayList<>();
list.add(new Student("张三",28,1,78.9));
list.add(new Student("李四",20,1,98.0));
list.add(new Student("王二",29,0,100.0));
list.add(new Student("张三",28,1,78.5));
Stream<Student> stream = list.stream();

遍历:

代码语言:javascript
复制
stream.forEach(stu-> System.out.println(stu.getName()));

过滤性别:

代码语言:javascript
复制
stream.filter(stu -> stu.getSex()==1)
                .forEach(stu -> System.out.println(stu.getName()));

名字去重:

代码语言:javascript
复制
stream.distinct().forEach(stu -> System.out.println(stu.getName()));

年龄排序:

代码语言:javascript
复制
stream.sorted(Comparator.comparingInt(Student::getAge))
                .forEach(stu -> System.out.println(stu.getName()));

排序反转:

代码语言:javascript
复制
stream.sorted(Comparator.comparingInt(Student::getAge).reversed())
                .forEach(stu -> System.out.println(stu.getName()));

姓名集合:

代码语言:javascript
复制
List<String> userList = stream.map(stu -> stu.getName())
                .collect(Collectors.toList());

分数求和:

代码语言:javascript
复制
Optional<Double> totalScore = stream.map(Student::getScore)
                .reduce((x, y) -> x+y);
System.out.println(totalScore.get());

求分数最大值:

代码语言:javascript
复制
Optional<Double> maxScore = stream.map(Student::getScore).reduce(Double::max);

求分数最小值:

代码语言:javascript
复制
Optional<Double> minScore = stream.map(Student::getScore).reduce(Double::min);

取前三名同学:

代码语言:javascript
复制
stream.sorted(Comparator.comparingDouble(Student::getScore).reversed())
                .limit(3)
                .forEach(System.out::println);

扔了前三名同学:

代码语言:javascript
复制
stream.sorted(Comparator.comparingDouble(Student::getScore).reversed())
                .skip(3)
                .forEach(System.out::println);

卧槽太多了,撸主举不过来了,但是基本上常用的就这么几个。函数式编程写出的代码更加简洁且意图明确,使用stream接口让你从此告别for循环,小伙伴们赶紧入坑享受吧!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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