java 8 stream
文章平均质量分 91
java 8 新特性 stream 流式编程
閃亮滴柒
这个作者很懒,什么都没留下…
展开
-
并行流-Parallelizing Streams
优化流计算流API的一个非常令人兴奋的特性是流能够并行处理数据。与Stream API并行处理数据非常简单,只需在任何现有流上调用parallel()方法即可。int parallelSum = IntStream.range(0, 10) .parallel() .sum();输出:parallelSum = 45这个和实际上是并行计算的。不过,您可能不会注意到在这样一个小示例上有任何性能提升。为什么要并行计算数据呢?可能是翻译 2021-10-11 21:19:01 · 513 阅读 · 0 评论 -
实现Collector接口
为什么要实现Collector接口?有三种方法可以创建您自己的收集器。我们在本教程中研究了第一个。它包括将现有收集器与collector工厂类提供的不同机制相结合,即将一个收集器作为下游收集器传递给另一个收集器,或者使用collectingAndThen()收集器的完成器。您还可以调用collect()方法,该方法接受构建收集器所需要的三个元素。这些方法在基本类型流和对象流中都可用。它们采用了我们在前几节中介绍的三个参数。supplier :用于创建在其中积累流元素的可变容器accumulato翻译 2021-10-09 11:17:26 · 230 阅读 · 0 评论 -
在stream上增加中间操作
将一个stream映射成另一个stream使用map()方法将一个流映射到另一个流,该方法将此函数作为参数。映射流意味着该流处理的所有元素都将使用该函数进行转换。List<String> strings = List.of("one", "two", "three", "four");Function<String, Integer> toLength = String::length;Stream<Integer> ints = strings.stream()翻译 2021-09-24 10:41:26 · 764 阅读 · 0 评论 -
整合stream
整合stream到现在为止,在本教程中看到的包括聚合数据在内的整合stream看起来像sql语言所做的一样。在示例中,你已使用了collect(Collectors.toList())来聚合元素。所有的这些操作称为终端操作,包括整合stream。在整合stream 时有两点需要注意:没有终端操作的流不会处理任何数据,如果你的代码中使用了这样的操作,将会是一个bug。一个流有且只有一个中间调用或终端调用,如果你重用一个流,将会抛出IllegalStateException异常。使用Binary翻译 2021-09-26 22:21:31 · 69 阅读 · 0 评论 -
使用可选项Optionals
支持不能产生结果的方法我们已经介绍了Optional类的几种用法,特别是在没有标识元素的流上调用终端操作的情况下。这种情况不容易处理,因为您不能返回任何值,包括0,返回null将使您的代码不得不在您不希望它的地方处理null值。对于无法生成值的情况,能够使用Optional类为更好的模式提供了许多机会,特别是更好地处理错误。这是您应该使用选项对象的主要原因:它们表示方法在某些情况下可能不会产生结果。在字段、列表、映射中存储可选实例的实例,或将其作为方法参数传递,并不是创建的选项。如果您设计的方法返回可翻译 2021-10-10 23:43:42 · 222 阅读 · 0 评论 -
创建自己的Collector
理解Collector的工作原理如前所述,收集器工厂类只处理对象流,因为以收集器对象为参数的collect()方法只存在于Stream中。如果您需要收集数字流,那么您需要了解收集器的构建元素是什么。简而言之,收集器是建立在四个基本组件之上的。前两个用于收集流的元素。只有平行流才需要第三个。第四个是某些类型的收集器所需要的,这些收集器需要对构建的容器进行后处理。第一个组件用于创建容器,流的元素将在其中收集。这个容器很容易辨认。例如,在前一部分讨论的案例中,我们使用了ArrayList类、HashSet类翻译 2021-10-08 17:33:21 · 163 阅读 · 0 评论 -
使用stream在内存中处理数据
使用stream在内存中处理数据stream编程产生背景:随着互联网行业的兴起,数据来源不再是单一的数据库。可能是缓存,数据库,消息中间件,es等。在对数据进行处理时,需要进行整合数据,原有的编写sql关联查询等方式不再适用复杂数据的处理。在此应用场景下,stream编程应运而生。Stream介绍stream是java Se8 除lambda外的又一重要属性,stream基于lambda构建和使用。stream是集合框架的伙伴框架,同样在内存中处理数据,stream’有着高效的处理过程。stream翻译 2021-09-23 13:08:48 · 1223 阅读 · 0 评论 -
使用Record 建模不可变数据
用不可变类建模不可变数据Java语言提供了几种创建不可变类的方法。最简单的方法可能是创建一个final类,其中包含final字段和一个初始化这些字段的构造函数。下面是这样一个类的例子。public class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; }}现在已翻译 2021-10-08 17:15:10 · 121 阅读 · 0 评论 -
创建流Stream
创建一个流创建流有好几种方法:第一类方法是使用工厂方法。使用这些工厂方法,可以使用以下元素来创建stream:可变长度的参数一个supplier一个unary operator ,从前一个元素生成下一个一个构建器之前用的都是使用集合来生成一个stream,可以用迭代器生成stream,可以使用数组来生成stream。还有以下的方式来创建stream:字符串的字符文本文件的行数用正则表达式分割字符串所创建的元素使用随机变量生成的随机数字也可以使用构建器创建stream。使用集合翻译 2021-09-26 09:58:26 · 565 阅读 · 0 评论 -
寻找流的特征
流的特征Stream API依赖于一个特殊的对象,Spliterator接口的一个实例。这个接口的名字来源于这样一个事实:在Stream API中,spliterator 的角色与在Collection API中迭代器的角色相似。此外,因为Stream API支持并行处理,所以spliterator对象还控制流如何在处理并行化的不同cpu之间分割元素。名称是split和iterator的缩写。详细介绍这个spliterator对象超出了本教程的范围。你需要知道的是这个spliterator对象带有流的特翻译 2021-09-30 15:19:46 · 103 阅读 · 0 评论 -
在Stream上添加终端操作
避免使用reduce() 方法如果流没有以终端操作结束,则它不处理任何数据。我们已经介绍了终端操作reduce(),在其他示例中还看到了几个终端操作。现在让我们展示可以在流上使用的其他终端操作。使用reduce()方法并不是整合流的最简单方法。你需要确保提供的二元运算符是关联的,然后你需要知道它是否有标识元素。需要检查许多点,以确保你的代码是正确的,并生成期望的结果。如果可以避免使用reduce()方法,那么你绝对应该避免,因为使用它很容易出错。幸运的是,Stream API提供了许多其他方法来整合流翻译 2021-09-27 22:07:15 · 177 阅读 · 0 评论 -
使用Collector作为最终操作
使用Collector来收集流元素翻译 2021-10-08 13:58:21 · 486 阅读 · 0 评论