java8中stream流,java8中stream流的使用教程及演示样例

java8引入了stream流的特性,在对集合数据的处理上能够带来很大的便利性。虽然我一开始看到别人使用stream流的代码时我也是一脸懵逼不懂什么意思,于是我花了点时间学习了下,并简单记录下java8中流的使用以及自己的一些代码测试样例。

java8中流提供了很多方法,常用的方法有如下几个:stream()                为集合创建串行流(比较常用)

parallelStream()    为集合创建并行流

forEach()               迭代数据

map()                    用于映射每个元素到对应的结果

filter()                    用于通过设置的条件过滤出元素

limit()                    用于获取指定数量的流

sorted()                用于对流进行排序

collect()                用于跟Collectors类配合实现将流转换成集合或聚合元素

直接看方法肯定是一脸懵逼,所以可以复制下方代码到编辑器中自己实际操作一下能更好的理解并学会使用。public class Test {

public static void main(String[] args) {

List res;

//获取数据

List list = getList();

System.out.println("场景1:打印每个用户的信息");

//场景一单独抽出成方法,方便后续查看结果调用

printList(list);

System.out.println("场景2:根据年龄排序(升序)");

res = list.stream()

.sorted(Comparator.comparing(User::getAge))

.collect(Collectors.toList());

printList(res);

System.out.println("场景3:根据年龄排序(降序)");

res = list.stream()

.sorted(Comparator.comparing(User::getAge).reversed())

.collect(Collectors.toList());

printList(res);

System.out.println("场景4:取年龄最小的前3个用户");

res = list.stream()

.sorted(Comparator.comparing(User::getAge))

.limit(3)

.collect(Collectors.toList());

printList(res);

System.out.println("场景5:选出已经成年(年龄>=18)的用户");

res = list.stream()

.filter(e -> e.getAge() >= 18)

.collect(Collectors.toList());

printList(res);

System.out.println("场景6:提取所有人的姓名");

res = list.stream()

.map(User::getName)

.collect(Collectors.toList());

printList(res);

System.out.println("场景7:计算所有人的年龄之和");

Integer reduce = list.stream()

.map(User::getAge)

.reduce(0, (a, b) -> a + b);

System.out.println("年龄之和:" + reduce);

System.out.println("==============\n");

}

private static List getList() {

return Arrays.asList(

new User("小赵",20),

new User("小钱",9),

new User("小孙",18),

new User("小李",13)

);

}

private static void printList(List list){

list.forEach(System.out::println);

System.out.println("==============\n");

}

}

@Data

@ToString

@AllArgsConstructor

class User{

/**

* 姓名

*/

private String name;

/**

* 年龄

*/

private Integer age;

}

代码说明:

User类是一个用户类,为了方便使用了Lombok注解

getList()方法用于创造一个用户list数据

printList()方法使用forEach对集合进行遍历打印,方便查看结果

上述代码执行结果:场景1:打印每个用户的信息

User(name=小赵, age=20)

User(name=小钱, age=9)

User(name=小孙, age=18)

User(name=小李, age=13)

==============

场景2:根据年龄排序(升序)

User(name=小钱, age=9)

User(name=小李, age=13)

User(name=小孙, age=18)

User(name=小赵, age=20)

==============

场景3:根据年龄排序(降序)

User(name=小赵, age=20)

User(name=小孙, age=18)

User(name=小李, age=13)

User(name=小钱, age=9)

==============

场景4:取年龄最小的前3个用户

User(name=小钱, age=9)

User(name=小李, age=13)

User(name=小孙, age=18)

==============

场景5:选出已经成年(年龄>=18)的用户

User(name=小赵, age=20)

User(name=小孙, age=18)

==============

场景6:提取所有人的姓名

小赵

小钱

小孙

小李

==============

场景7:计算所有人的年龄之和

年龄之和:60

==============

总结:Java8的流操作,真香!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值