java 真香,Java8 Stream 真香,赶紧来舔一舔

本文详细介绍了Java Stream API的使用,包括遍历、过滤、去重、排序、映射和聚合等操作。通过实例展示了如何使用Stream简化代码,如筛选学生、名字去重、按年龄排序等。利用Stream API,可以告别传统的for循环,让代码更加简洁和高效。
摘要由CSDN通过智能技术生成

e817a63138936f176ff0300e14ff02a4.png

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

举哥简单的例子,定义一个数组:String[] users = new String[]{"张三","李四","王二"};

我们来使用之前的方式遍历:for(int i=0;i

System.out.println(users[i]);

}

亦或者使用:for(String u:users){

System.out.println(u);

}

使用最新的API实现方式:Stream 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 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 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 userList = stream.map(stu -> stu.getName())

.collect(Collectors.toList());

分数求和:Optional totalScore = stream.map(Student::getScore)

.reduce((x, y) -> x+y);

System.out.println(totalScore.get());

求分数最大值:Optional maxScore = stream.map(Student::getScore).reduce(Double::max);

求分数最小值:Optional 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循环,小伙伴们赶紧入坑享受吧!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值