Java 8 Streams 是否与 .Net IEnumerable 相同?[已关闭]

2022-09-01 12:04:10

起初,我认为Java Streams必然与I / O相关,但它们看起来真的很像.Net中的IEnumerable接口。

这种比较公平吗?


答案 1

也许这是我在谷歌上为你找到的有趣的东西:

Java 流(不要与 InputStream 和 OutputStream 混淆)或多或少地执行与 LINQ 相同的操作,并行处理镜像 PLINQ。但是,没有任何漂亮的类似SQL的语法可以使用 - 您必须以函数式的方式进行。就像 LINQ 需要的扩展方法一样,流直到 Java 8 才会出现,因为它们需要 defender 方法来处理现有的集合类型。

流在很大程度上等效于 .NET IEnumerable。要查看它们的相似之处,请考虑以下示例:

// Write each value in a collection to standard output on a separate line:

// C# - LINQ
myCollection.ForEach( x => Console.WriteLine(x) );
// Java - stream
myCollection.stream().forEach( x -> System.out.println(x) );

// Sum all the values in a (potentially large) collection, using parallelism
// if possible:

// C# - PLINQ
int sum = myCollection.AsParallel().Aggregate( (x, y) => x + y );
// Java - parallel stream
int sum = myCollection.stream().parallel().reduce( (x, y) -> x + y );

您会期望 stream() 方法位于 Iterable 上,就像 LINQ 在 IEnumerable 上运行一样,但它是在 Collection 上。也许是因为Java缺乏收益回报语义,所以Iterable在Java中不那么有趣或有用。

来源:http://leftoblique.net/wp/2013/07/25/java-8-a-k-a-oracle-finally-catches-up-to-net-framework-3-0/

编辑:在谷歌上有很多关于它的信息。以下是一些更有趣的文章:https://web.archive.org/web/20130331002411/http://blog.informatech.cr/2013/03/24/java-streams-preview-vs-net-linq/


答案 2

推荐