美文网首页
Java8新特性之Stream

Java8新特性之Stream

作者: 山巅自相见 | 来源:发表于2022-04-07 17:49 被阅读0次

Java 8 API新的抽象称为流Stream,可以让开发者以一种声明的方式处理数据,这也太讷了。
Stream运用一种类似SQL从数据库查询数据这种直观的方式来提供一种对Java集合运算和表达的高阶抽象。

+--------------------+       +------+   +------+   +---+   +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+       +------+   +------+   +---+   +-------+

以上代码转换为Java代码为

List<Integer> transactionsIds = 
widgets.stream()
             .filter(b -> b.getColor() == RED)
             .sorted((x,y) -> x.getWeight() - y.getWeight())
             .mapToInt(Widget::getWeight)
             .sum();

什么是Stream

Stream(流)是一个来自于数据源的元素队列并支持聚合操作

  • 元素是一个特定类型的对象,形成一个队列,Java中的Stream并不会储存元素,而是按需计算。
  • 数据源:可以是集合、数据、I/O channel或者产生器generator等等
  • 聚合操作:类似于sql语句一样的操作,例如filter、sorted、mapToInt和foreach等等

生成流

Java 8 中,集合接口有两种生成流的方法

  • stream() - 为集合创建串行流
  • parallelStream() - 为集合创建并行流
List<String> list = Arrays.asList("abc", "", "bs", "abc", "");
List<String> strList = list.stream().filter(str -> !str.isEmpty()).collect(Collectors.toList());

foreach

Stream提供了新的‘foreach’来迭代流中的每个数据

Ramdom random = new Ramdom();
// 随机生成10个随机数
random.stream().limit(10).foreach(System.out::println);

map

map方法用于映射每一个元素到对应的结果

List<Integer> list = Arrays.asList(3, 2, 2, 4, 5, 3);
// 获取每个元素的平方
List<Integer> squaresList = list.stream().map(i -> i * i).distinct.collect(Collectors.toList);

filter

filter方法用于通过设置条件过滤出元素

List<String> list = Arrays.asList("abc", "", "bs", "abc", "");
// 获取空字符串的数量
list.stream().filter(str -> str.isEmpty()).count();

sorted

sorted方法用于对流进行排序

Ramdom random = new Ramdom();
random.stream().limit(10).sorted().foreach(System.out::println);

Collectors

Collectors实现了许多归约操作,例如将流转换成集合和聚合元素。Collectors可用于返回字符串或集合。

List<String> list = Arrays.asList("abc", "", "bs", "abc", "");
List<String> strList = list.stream().filter(str -> !str.isEmpty()).collect(Collectors.toList());
System.out.println("筛选列表:" + strList);
List<String> strList = list.stream().filter(str -> !str.isEmpty()).collect(Collectors.joining("|"));
System.out.println("合并字符串:" + strList);

统计

一些产生结果的收集器也非常有用,主要用于int、double、long等基本类型上。

List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有数之和 : " + stats.getSum());
System.out.println("平均数 : " + stats.getAverage());

感谢各位伙计给娃子点的关机(关注)


不点赞的长这样🐵

相关文章

  • Stream流

    Stream流 java8新特性 Stream定义 A sequence of elements supporti...

  • Java8之Stream流(六)收集

    Java8之Stream流(一)基础体验 Java8之Stream流(二)关键知识点 Java8之Stream...

  • Stream API

    Stream 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Stream API Java...

  • java 8 stream 流详细教程

    1 基本特性 Java8的API中添加了一个新的特性: 流,即stream。stream是将数组或者集合的元素视为...

  • JAVA8新特性:Stream与Lambda表达式

    一、Stream学习 在学习lambda表达式之前,我们需要先了解Stream这个java8的新特性。 Strea...

  • Java8新特性系列(流性能)

    上期介绍了Java8中Stream的新特性,本期我们将测试下stream与parallelStream的性能以及应...

  • java8新特性

    java8新特性 原创者:文思 一、特性简介 速度更快 代码更少,增加了Lambda 强大的Stream API ...

  • Java8新特性之Stream

    Java 8 API新的抽象称为流Stream,可以让开发者以一种声明的方式处理数据,这也太讷了。Stream运用...

  • java8新特性之Stream

    什么是stream?Stream流和传统的IO流虽然都叫做流,但是他们是两种完全不同的东西。流可以简单的说是处理数...

  • 03_Java8_Lamda表达式学习

    Java8 的新特性:Lambda表达式、强大的 Stream API、全新时间日期 API、Concurrent...

网友评论

      本文标题:Java8新特性之Stream

      本文链接:https://www.haomeiwen.com/subject/chcssrtx.html