2 回答
TA贡献1853条经验 获得超9个赞
函数式编程的要点是函数必须被视为一个对象。
但是你知道,函数(方法)不是java中的对象。它与 javascript 不同。
所以,我们应该使用名为 Predicate 的接口。
List<Apple> apples = new ArrayList<>();
你想得到重量苹果。起初,
List<Apple> weightApples = new ArrayList<>();
for(int i = 0; 9< apples.size(); i++){
if(apples.getWeight() > 10){
weightApples.add(apples.get(i));
}
}
这段代码。
在函数式编程中,函数是“纯函数”。
在纯函数中,应避免在函数中使用外部变量。
而且,我们不关心“使用函数的行”中的函数逻辑
首先,我们需要谓词接口。
interface Predicate<T>{
public boolean pass(T t);
}
通过泛型,我们可以扩展对象类型。
我们可以制作过滤器。
public static <T> List<T> filter(List<T> list, Predicate<T> predicate){
List<T> result = new ArrayList<>();
for(T el : list){
if(predicate.pass(el)){
result.add(el);
}
}
return result;
}
pass() 尚未实现。
它可以由匿名类实现。
最后,使用 lamda 将方法视为对象!
filter(apples, (Apple apple) -> apple.getWeight()>10);
我不是英语的人,所以英语很差。
但我希望它对你有帮助!谢谢。
TA贡献1804条经验 获得超7个赞
首先,接受一个参数并返回布尔值的函数应该实现Java 8Predicate。
然而,在我看来,谓词并不是要取代任何和所有的if陈述。它们旨在用作 Java 8 集合流中的过滤器。您提供的示例似乎不适合这种情况。
添加回答
举报
