开发者社区> 小柒2012> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Java8 Stream 真香,赶紧来舔一舔

简介:
+关注继续查看

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

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

String[] users = new String[]{"张三","李四","王二"};

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

for(int i=0;i<users.length;i++){
    System.out.println(users[i]);
}

亦或者使用:

for(String u:users){
   System.out.println(u);
}

使用最新的API实现方式:

Stream<String> stream = Stream.of(users);
stream.forEach(user-> System.out.println(user));

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

首先定义一个学生类:

@Data
@Builder
public class Student {
    private String name;
    private Integer age;
    private Integer sex;
    private Double score;
}

定义基础数据:

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();

遍历:

stream.forEach(stu-> System.out.println(stu.getName()));

过滤性别:

stream.filter(stu -> stu.getSex()==1)
                .forEach(stu -> System.out.println(stu.getName()));

名字去重:

stream.distinct().forEach(stu -> System.out.println(stu.getName()));

年龄排序:

stream.sorted(Comparator.comparingInt(Student::getAge))
                .forEach(stu -> System.out.println(stu.getName()));

排序反转:

stream.sorted(Comparator.comparingInt(Student::getAge).reversed())
                .forEach(stu -> System.out.println(stu.getName()));

姓名集合:

List<String> userList = stream.map(stu -> stu.getName())
                .collect(Collectors.toList());

分数求和:

Optional<Double> totalScore = stream.map(Student::getScore)
                .reduce((x, y) -> x+y);
System.out.println(totalScore.get());

求分数最大值:

Optional<Double> maxScore = stream.map(Student::getScore).reduce(Double::max);

求分数最小值:

Optional<Double> minScore = stream.map(Student::getScore).reduce(Double::min);

取前三名同学:

stream.sorted(Comparator.comparingDouble(Student::getScore).reversed())
                .limit(3)
                .forEach(System.out::println);

扔了前三名同学:

stream.sorted(Comparator.comparingDouble(Student::getScore).reversed())
                .skip(3)
                .forEach(System.out::println);

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

作者: 小柒

出处: https://blog.52itstyle.vip

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Java 源码 | 坦克大战,等你来战
Java 源码 | 坦克大战,等你来战
0 0
这个中秋,我用 Java 画了一个月饼!
这个中秋,我用 Java 画了一个月饼!
0 0
金九银十,收下这份 Java String 面试题
金九银十,收下这份 Java String 面试题
0 0
宝贝,来,满足你,二哥告诉你学 Java 应该买什么书?
宝贝,来,满足你,二哥告诉你学 Java 应该买什么书?
0 0
跟着【冰河】大佬一起学习Java鸭!~还有小礼品可领哟
年末将至,新年的味道越来越重了。乘风者专家博主——冰河倾力打造的《Java8从入门到精通》电子书从上线到现在已在全网受到数十万追捧,热度空前[火]。我们也策划了一场热闹非凡的打卡领好礼活动。三步动作就可以领取小米鼠标、阿里云定制蓝牙音箱,更有机会获得冰河亲笔签名的新书《深入理解分布式事务:原理与实战》[礼物][礼物][礼物]。福利多多,赶快拉动你周围的小伙伴一起参与进来,给自己一个年终奖吧![烟花][烟花][烟花]
0 0
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(15)
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
0 0
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(11)
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
0 0
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏(1)
怒肝俩月,新鲜出炉史上最有趣的Java小白手册,第一版,每个 Java 初学者都应该收藏
0 0
+关注
小柒2012
一个程序员,欢迎骚扰!!!
文章
问答
文章排行榜
最热
最新
相关电子书
更多
Java开发者面试百宝书
立即下载
Java应用提速(速度与激情)
立即下载
从《阿里巴巴Java开发手册》编写推广谈技术成长
立即下载