为什么我应该使用 collect(Collectors.toList()),我可以不用它?
Why should I use collect(Collectors.toList()), when I can do without it?
我在很多Java8个参考资料和例子中看到过如下代码:
List <Integer> l = Arrays.asList(7, 3, 9, 8, 6, 5, -1, -100);
l.stream().filter(y -> y <l.get(0)).collect(Collectors.toList()).
forEach(System.out::println);
但是,我可以使用以下方法获得相同的结果:
l.stream().filter(y -> y <l.get(0)).forEach(System.out::println);
那么,使用几乎无处不在的 collect(Collectors.toList()) 有何神圣之处?
如果您只关心打印通过 filter
的元素,则不需要 collect(Collectors.toList())
。
使用 ...collect(Collectors.toList()).forEach(System.out::println)
是一种浪费,因为它创建了一个 List
实例,您没有保留对它的引用,因此永远无法访问。
如果您想创建 Stream
元素的 List
,请使用 collect(Collectors.toList())
。您通常会保留对 List
.
的引用
在这种情况下,将流收集到列表中确实没有意义。当您确实明确需要列表对象时(例如,为了将其传递给其他人 API),应该使用收集来创建列表(或集合、映射或其他)。
仅查看 the documentation,Stream#forEach
是 非确定性的 (例如,您无法知道并行访问元素的顺序流在一般情况下)。因此,我认为当您根据访问元素的顺序需要确定性时(或者,当然,您想要一个列表的任何其他时间),当然,而不是当你没有。
在您的 具体 示例中,您知道流不是并行的,因为 Collection#stream
returns 顺序流。
Stream.collect(...) & Stream.forEach(...)
是使用给定流实例结果的操作,它们没有任何 return 类型。所以在你的情况下你不需要两者。
当您需要在变量 say 列表中获取流输出的结果并稍后在应用程序中使用它时,请使用 collect(..) 方法。
我在很多Java8个参考资料和例子中看到过如下代码:
List <Integer> l = Arrays.asList(7, 3, 9, 8, 6, 5, -1, -100);
l.stream().filter(y -> y <l.get(0)).collect(Collectors.toList()).
forEach(System.out::println);
但是,我可以使用以下方法获得相同的结果:
l.stream().filter(y -> y <l.get(0)).forEach(System.out::println);
那么,使用几乎无处不在的 collect(Collectors.toList()) 有何神圣之处?
如果您只关心打印通过 filter
的元素,则不需要 collect(Collectors.toList())
。
使用 ...collect(Collectors.toList()).forEach(System.out::println)
是一种浪费,因为它创建了一个 List
实例,您没有保留对它的引用,因此永远无法访问。
如果您想创建 Stream
元素的 List
,请使用 collect(Collectors.toList())
。您通常会保留对 List
.
在这种情况下,将流收集到列表中确实没有意义。当您确实明确需要列表对象时(例如,为了将其传递给其他人 API),应该使用收集来创建列表(或集合、映射或其他)。
仅查看 the documentation,Stream#forEach
是 非确定性的 (例如,您无法知道并行访问元素的顺序流在一般情况下)。因此,我认为当您根据访问元素的顺序需要确定性时(或者,当然,您想要一个列表的任何其他时间),当然,而不是当你没有。
在您的 具体 示例中,您知道流不是并行的,因为 Collection#stream
returns 顺序流。
Stream.collect(...) & Stream.forEach(...)
是使用给定流实例结果的操作,它们没有任何 return 类型。所以在你的情况下你不需要两者。
当您需要在变量 say 列表中获取流输出的结果并稍后在应用程序中使用它时,请使用 collect(..) 方法。