为什么我们需要 Predicate 接口(interface)?我不明白下面的代码。我怎样才能找到primaryPaxOutput的结果?
Predicate<TravellerType> predicate1 = new Predicate<TravellerType>() {
@Override
public boolean apply(TravellerType input) {
return PassengerCodeUtil.paxCodesEqual(input.getTravellerType().getCode(), "CHD");
}
};
primaryPaxOutput = Iterables.tryFind(result.getTravellerTypes(), predicate1).orNull();
最佳答案
谓词
非常适合将整个函数抽象为它们产生的任何类型的结果,这提高了可读性和可重用性。对于该界面的 Guava 和 Java 版本都是如此。 谓词
应该有良好的命名,因此在这个例子中有点难以理解发生了什么。
我不知道 TravellerType
或 PassengerCode
是什么,但为了便于论证,让我们将 Predicate
重命名为它的作用。
然后我们可以将 iterables 语句编码为:
primaryPaxOutput = Iterables.tryFind(result.getTravellerTypes(), paxCodeIsCHD).orNull();
然后我们将此声明解释为:
Iterables.tryFind( //Find the first instance
result.getTravellerTypes(), //among this Iterable
paxCodeIsCHD //where this predicate is true
).orNull(); //or else set to null.
如果您知道 tryFind
的作用,那么此代码将比注入(inject)匿名类甚至 lambda 作为参数更具可读性。
关于java - 为什么我们需要Java中的Predicate函数式接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44523215/