据我所知,Java代码易于阅读且易于理解,但从我的角度来看,引入lambda表达式非常复杂。是什么让oracle认为他们将java8作为主要吸引力。
因为我我是一名java程序员,所以我想知道它为什么重要。
答案 0 :(得分:3)
考虑http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html#approach1
Lambda可用于以可读的方式制作可扩展代码 (免责声明,我实际上并不知道" Java,我在C ++中更舒服)
要从特定范围中提升功能,例如检查人员,并在满足某些条件时打印它们,Java可能以前使用对象执行此操作。
public static void printPersons(
List<Person> roster, CheckPerson tester) {
for (Person p : roster) {
if (tester.test(p)) {
p.printPerson();
}
}
}
interface CheckPerson {
boolean test(Person p);
}
class CheckPersonEligibleForSelectiveService implements CheckPerson {
public boolean test(Person p) {
return p.gender == Person.Sex.MALE &&
p.getAge() >= 18 &&
p.getAge() <= 25;
}
}
您使用的是:
printPersons(
roster, new CheckPersonEligibleForSelectiveService());
作为一名非Java开发人员,这看起来对我来说有点傻。 Person
显然是一个重要的对象,但CheckPerson
和CheckPersonEligibleForSelectiveService
是不太有动力的课程,仅仅因为我们需要它们而存在。
感觉它们封装的重要性是具有检查功能。如果我们可以简单地通过它,我们就不需要处理类的脚手架了。哦,但看起来我们可以和lambdas一起玩!
printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);
这段代码对我来说是超级可读的,即使我在Java 4中停止编写Java。
从技术上讲,上面的论点并不公平,因为你可以用这样的对象更紧凑地做到这一点:
printPersons(
roster,
new CheckPerson() {
public boolean test(Person p) {
return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25;
}
}
);
但是,你真的需要为测试创建一个对象吗?我知道一些不好的面试问题涉及这样的匿名类的构造,所以它可能不是最直观的语法。
但重点是,如果函数是我们需要赋予代码的重要事物,我们应该有一个可以为代码提供函数的机制。这是用lambdas完成的。
答案 1 :(得分:1)
我认为这里的字是“分布式处理”。您可能已经注意到,在最近几年,如果不添加越来越多的内核,创建更快的处理器将会更加困难。
答案 2 :(得分:0)
要回答这个问题,你不应该考虑开发人员的问题。你正在考虑作为一名程序员。有什么区别?编码器是如果有人给你逻辑,你编写代码来执行逻辑。开发人员就是那个给你逻辑的人。
如果你讨厌某种语言的某些特征,那么自然倾向于远离它。但是当你独自工作时,一切都很好。如果有2个以上的开发人员,您很可能会阅读并且必须了解其他人编写的内容。如果代码是优雅地完成的并且解决了手头的问题,那么你不能只是说你不想使用它,因为你缺乏兴趣来查找文档。
EDIT 改变了最后一部分来自知识。