【发布时间】:2019-01-19 18:43:02
【问题描述】:
我正在阅读函数式编程基础知识。不管怎样,我做了一些例子来试图理解这个概念并正确使用它。
我没有得到这种函数式编程的力量。是不是只写 lambda 而不是普通代码?
如果我们有这个类:
public class Dinosaurio {
private boolean esMamifero;
private String nombre;
public Dinosaurio(String n, boolean esMam) {...}
//getters and setters
这个功能界面:
@FunctionalInterface
public interface DinosaurioTester {
boolean test(Dinosaurio d);
}
还有这个主类:
public class LambdaMain {
public static void main(String[] args) {
List<Dinosaurio> lista = new ArrayList<>();
lista.add(new Dinosaurio("Manolo", true));
lista.add(new Dinosaurio("Pepe", true));
lista.add(new Dinosaurio("Paco", false));
lista.add(new Dinosaurio("Curro", true));
lista.add(new Dinosaurio("Nemo", false));
pintadorDinosaurios(lista, a->a.isEsMamifero());
}
public static void pintadorDinosaurios(List<Dinosaurio> ld, DinosaurioTester dt) {
for(Dinosaurio d : ld) {
if(dt.test(d)) {
System.out.println(d.getNombre());
}
}
}
}
这很好用,但我没有看到使用它的真正优势:
if(dt.test(d)) {
而不是这个:
if(d.isEsMamifero())
编辑:当然,这个例子对于函数式编程的实际使用来说是一个糟糕的示例代码。但我现在能想到的就这些了。
【问题讨论】:
-
如果你想测试恐龙的不同属性,例如:你想打印所有名为“Manolo”的恐龙吗?
-
可能duplicate? VTC 还不够确定...如果有帮助,请参阅我对链接问题的回答。
-
仅仅使用 Lambda 表达式不会让您了解函数式编程或更具体地说是声明式编程的需求。好吧,您可能可以先以命令式风格编写整个代码,然后将其与发布的代码进行比较!之后,您可能会对编程的函数式范式的力量有所了解。
-
@JaredSmith 谢谢。这对我的问题有很大帮助:)
-
@Genaut 对。但是如果你不使用函数参数,你必须有一个打印哺乳动物的方法,一个打印恐龙的方法叫 Manolo,一个打印名字长于 4 个字符的恐龙的方法......所以取而代之的是更改 1 行,您添加 7。
标签: java lambda java-8 functional-programming