繁体   English   中英

java 8 Stream API中的终端操作如何调用中间操作

[英]How terminal operation in java 8 Stream API called intermediate operation

在 java 8 中,中间操作添加侦听器,就像它们是惰性处理的意思一样,每当调用任何终端操作时,终端操作都会依次调用每个侦听器,最后终端操作将根据操作类型准备结果并关闭 stream。 所以想了解这些监听器是如何添加的,以及终端操作内部是如何调用这些中间操作监听器的。

例子:-

List<String> countries= Arrays.asList("India","Austriala","America","Japan","England","Germany");

countries.stream().map(s -> s.length()).max(Integer :: compare).get();

Map<Integer,Set<String>> map = countries.stream().collect(Collectors.groupingBy(String::length, Collectors.toSet()));
map.entrySet().forEach(System.out :: println);

这里我们使用一个中间操作 map 并且 max 是终端操作。

很简单: countries是 stream。 country.map countries.map(s -> s.length())创建一个新的 object。 这个 object 包含 2 个东西:

  • 那stream
  • 代码s -> s.length()为 function。

就这样。 它不处理 stream。 它本身就是 stream。 If you ask this stream to provide data, it will start reading its inner stream, and tossing the objects that fall out of that inner stream at the function it has, then, it provides those.

只有终端操作开始向 stream 询问您在( X.max中的X )上调用终端的数据,然后“使火车运行”。 X 将开始生成数据,为此,假设 X 是一个中间体,它会询问您调用它的YY.map(s -> s.length())中的 Y,依此类推上。

Java 的核心库都是开源的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM