java8 新特性之流式数据处理_JDK8新特性之Stream流

是什么是Stream流java.util.stream.Stream

Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西。

流可以简单的说是处理数据集合的东西,可以申明式流式API来处理集合,而不是写一个逻辑实现。

流分类

流分为顺序流及并行流,顺序流即每个指令按顺序执行,并行流即集合里面的操作并行执行。List numbers = Arrays.asList(1, 2, 3);

// 顺序流

numbers.stream().forEach(n -> System.out.print(n));

//并行流

numbers.parallelStream().forEach(n -> System.out.print(n));

以上例子,顺序流总是输出123,而并行流则每次结果都不一定,并行流使用了ForkJoinPool分而治之

使用流

以下举了流的一些常用的用法。public class StreamTest {

public static void main(String[] args) {

System.out.println("过滤-找出年纪大于18岁的人");

List list = initList();

list.stream().filter((User user) -> user.getAge() > 18).collect(Collectors.toList())

.forEach(System.out::println);

System.out.println();

System.out.println("最大值-找出最大年纪的人");

list = initList();

Optional max = list.stream().max((u1, u2) -> u1.getAge() - u2.getAge());

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

System.out.println();

System.out.println("映射-规纳-求所有人的年纪总和");

list = initList();

Optional reduce = list.stream().map(User::getAge).reduce(Integer::sum);

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

System.out.println();

System.out.println("分组-按年纪分组");

list = initList();

Map> userMap = list.stream()

.collect(Collectors.groupingBy(User::getAge));

MapUtils.verbosePrint(System.out, null, userMap);

System.out.println();

System.out.println("创建-去重-统计");

Stream userStream = Stream

.of(new User("u1", 1), new User("u2", 21), new User("u2", 21));

System.out.println(userStream.distinct().count());

System.out.println();

}

public static List initList() {

List list = new ArrayList<>();

list.add(new User("oaby", 23));

list.add(new User("tom", 11));

list.add(new User("john", 16));

list.add(new User("jennis", 26));

list.add(new User("tin", 26));

list.add(new User("army", 26));

list.add(new User("mack", 19));

list.add(new User("jobs", 65));

list.add(new User("jordan", 23));

return list;

}

}

输出结果:过滤-找出年纪大于18岁的人

User [username=oaby, age=23]

User [username=jennis, age=26]

User [username=tin, age=26]

User [username=army, age=26]

User [username=mack, age=19]

User [username=jobs, age=65]

User [username=jordan, age=23]

最大值-找出最大年纪的人

User [username=jobs, age=65]

映射-规纳-求所有人的年纪总和

235

分组-按年纪分组

{

16 = [User [username=john, age=16]]

65 = [User [username=jobs, age=65]]

19 = [User [username=mack, age=19]]

23 = [User [username=oaby, age=23], User [username=jordan, age=23]]

26 = [User [username=jennis, age=26], User [username=tin, age=26], User [username=army, age=26]]

11 = [User [username=tom, age=11]]

}

创建-去重-统计

2

但需要注意的是流只能执行一次,再次使用需要重要打开。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值