10

Lambda 表达式的Java 教程说如下:

本节讨论 Project Lambda 中包含的功能,旨在通过向 Java 语言添加闭包和相关功能来支持多核环境中的编程。

我的问题是,根据多核系统和并发/并行编程,我使用 Lambda 表达式有哪些具体优势?

4

3 回答 3

8

Parallelism is trivial to implement e.g. if you have a collection and you implement a lambda thus:

collection.map { // my lambda }

then the collection itself can parallelise that operation without you having to do the threading etc. yourself. The parallelism is handled within the collection map() implementation.

In a purely functional (i.e. no side effects) system, you can do this for every lambda. For a non-purely functional environment you'd have to select the lambdas for which this would apply (since your lambda may not operate safely in parallel). e.g. in Scala you have to explicitly take the parallel view on a collection in order to implement the above.

于 2013-06-07T10:24:14.420 回答
7

一些参考资料:

于 2013-06-07T17:01:02.453 回答
2

充分尊重 Java 8 lambda 函数和开发人员的意图,我想问一下:什么是新的,为什么它比传统的接口/方法函数方法更好?为什么它比(假设)更好forEach(IApply)

IApply是接口

public interface IApply {
    void exec(KEY key, VALUE value);
}

它如何阻碍并行性?至少 IApply 的实现可以重用,继承(扩展),在静态类中实现。
在我看到的数十个初级错误示例之后,最后一个参数很重要,其中错过了 lambda 代码访问外部类的 this 可能是导致类在对它的不同引用已经为空之后留在内存中的原因。
从这个角度来看,对类的静态成员的引用非常重要(类似于 C#“委托”的情况。主要是 - 从一方面来说 - lambda 是超级封装,从另一个方面来说是不可重用的,并且同时 - 违规OOD文化的基本原则:免费访问硕士会员。从编程文化的角度来看——倒退到上世纪70年代。
函数式编程?-我明白了,但是为什么要混合是Java的OOP现象。OOD 有一个名为 Data-Behavior decoupling 的奇妙模式,它优雅地提供了相同的可能性?论点 - 它与 Java Script 中的一样......真的!因此,提供在 Java 中嵌入 Java Script 并在 Java Script 中编写系统块的工具。所以我仍然看不到真正的好处,就像广告浪潮中那样。

于 2016-05-10T04:21:05.813 回答