Java 8 Streams是否与.Net IEnumerable相同?

时间:2014-02-14 14:47:22

标签: java .net java-8

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

这种比较公平吗?

1 个答案:

答案 0 :(得分:21)

也许这是我在Google上为您找到的有趣内容:

<强>流

Java流(不要与InputStream和OutputStream混淆)或多或少与LINQ相同,并行处理镜像PLINQ。但是,没有任何类似SQL的语法可以使用 - 你必须要做功能风格。正如LINQ需要扩展方法一样,直到Java 8才会出现流,因为它们需要使用defender方法来处理现有的集合类型。

Stream大致相当于.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缺乏yield-return语义,所以Iterable在Java中不那么有趣或有用。

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

修改 在Google上有很多可以找到它。这里有一些更有趣的文章: https://web.archive.org/web/20130331002411/http://blog.informatech.cr/2013/03/24/java-streams-preview-vs-net-linq/