Sevilla Java 用户组 正在共同努力完成关于 lambda 和流的 Java 8 MOOC 。作为其中的一部分,我们在课程中进行了 三节课 ,这样我们就可以作为一个小组,提出有关讲座的问题,获得家庭作业的帮助,以及(如果我们觉得自己很聪明的话!)帮助那些可能挣扎(或者可能没有看过视频)。
昨晚我们进行了第一节课,非常顺利。我们有一个很小的小组,其中大约一半人完成了家庭作业和测验(第一节课),另一半人没有。我们一起完成作业练习,了解每个问题如何有多种解决方案,并探索如何在简洁与更长、更具描述性的代码之间取得平衡。
lambda 和流 mooc 第 1 课的第一次离线会议 #java8 #40gradosAlaSombra pic.twitter.com/hJgPrLl3C5
- SVQ JUG (@SVQJUG) 2015 年 7 月 20 日
总的来说,人们认为课程的视频非常清晰和解释得很好,尽管我们还介绍了如何以 1.5 速度运行视频,因为大多数人都想更快地运行它们!我认为视频的节奏特别适合那些不太习惯用英语听的人,如果您对这些材料感到满意,可以轻松添加字幕并加快播放速度。
第一课介绍 lambda 及其在一些新的 Java 8 方法中的使用(特别是关于集合,但 不是 流)。
我们讨论最多的领域,需要更清楚的是:
-
功能接口
:
单一抽象方法(SAM)的
真正含义是什么?此外,我们对在
Object
和接口(例如equals()
)上声明的方法的“异常”很感兴趣,但我们得出的结论是,简单地考虑只寻找一种方法而没有任何形式的方法更容易完全没有实现——在Object
上定义的方法必须有一个实现,因为Object
不是抽象类或接口。 - 方法引用 :我们查看了三种类型的示例,它们不是构造函数引用,它们在 lambda 形式中的样子以及它们的不同之处。方法引用……不难理解,但如果您不习惯它们,在代码中看起来确实有点别扭,并且当您的所有类型、参数和返回值消失时可能会造成混淆。
-
并行执行:第一课讲了很多关于 lambda 如何使开发人员更容易并行化和并发的问题,因此显然存在关于如何在多 CPU 环境中执行家庭作业示例中的代码的问题。我假设(虽然我正在等待澄清)像
removeIf
这样的方法没有并行化,因为在 Streams 的情况下你必须明确声明你想要并行化。我们还谈到了一些关于 parallel() 和 parallelStream() 的内容,尽管该课程根本没有涉及 Streams。我们想更多地了解并行的利弊。
当然,我还偷看了一些 IntelliJ IDEA 的 精彩演示,包括它对创建 lambda 和将事物转换为(和自)方法引用的神奇支持。
这是一次很棒的协作会议,大多数人都有机会展示他们的代码(如果他们愿意的话!)。最后,我们找到了五个练习问题的解决方案,并讨论了人们希望更清楚地了解的所有领域。