Java 8 Streams与.Net IEnumerable相同吗?

Otá*_*cio 21 .net java java-8

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

比较公平吗?

P G*_*iep 23

也许这是我在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 );
Run Code Online (Sandbox Code Playgroud)

你可以期望stream()方法在Iterable上,就像LINQ在IEnumerable上运行一样,但它在Collection上.也许是因为Java缺乏yield-return语义,所以Iterable在Java中不那么有趣或有用.

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

编辑: 在Google上有很多可以找到它.以下是一些更有趣的文章:http: //blog.informatech.cr/2013/03/24/java-streams-preview-vs-net-linq/

  • 在C#中,迭代实现本身也封装在一个黑盒子中:IEnumerator的实现者.因此,如果你有一个IEnumerable树,那么迭代可以通过IEnumerable的GetEnumerator()方法获得,它返回IEnumerator.没有错,在这里混合.Java属于OOP,不具备功能,因此强制功能并不优雅.功能概念btw没有错.强制封装,降低依赖性仍然是打开OOP样式选择,这是优雅的. (9认同)
  • Stream是一个很好的理由,不能迭代.功能模式都是关于内部迭代的.调用者不需要关心它是如何完成的.在C#中,这两个概念都是混合的,并不是很干净.如果它是可迭代的,它将支持外部迭代,就像c#一样,在函数式编程方面不是很优雅. (5认同)