Java 这是函数接口的正确用法吗?
我正在努力熟悉lambda函数。首先,我决定编写一个名为Java 这是函数接口的正确用法吗?,java,lambda,java-8,Java,Lambda,Java 8,我正在努力熟悉lambda函数。首先,我决定编写一个名为TernaryOperator的方便类。所以,问题是我是否正确地理解了意识形态,或者我是否遗漏了一些本应以不同方式完成的事情 public class TernaryOperator<T, U> implements Function<T, U> { private final Function<T, U> f; public TernaryOperator(Predicate<
TernaryOperator
的方便类。所以,问题是我是否正确地理解了意识形态,或者我是否遗漏了一些本应以不同方式完成的事情
public class TernaryOperator<T, U> implements Function<T, U> {
private final Function<T, U> f;
public TernaryOperator(Predicate<? super T> condition,
Function<? super T, ? extends U> ifTrue,
Function<? super T, ? extends U> ifFalse) {
this.f = t -> condition.test(t) ? ifTrue.apply(t) : ifFalse.apply(t);
}
@Override
public U apply(T t) {
return f.apply(t);
}
}
public类TernaryOperator实现函数{
私有最终函数f;
公共TernaryOperator(Predicate不需要实现函数
接口。最好在适当的类中编写静态方法:
public static <T, U> Function<T, U> ternary(Predicate<? super T> condition,
Function<? super T, ? extends U> ifTrue,
Function<? super T, ? extends U> ifFalse) {
return t -> condition.test(t) ? ifTrue.apply(t) : ifFalse.apply(t);
}
你的代码非常好。这更适合于,但是问问你自己,三元(String::isEmpty,x->“none”,String::trim)
是否真的比表达式s->s.isEmpty()?“none”:s.trim()
…
public static <T, U> Function<T, U> ternary(Predicate<? super T> condition,
Function<? super T, ? extends U> ifTrue,
Function<? super T, ? extends U> ifFalse) {
return t -> condition.test(t) ? ifTrue.apply(t) : ifFalse.apply(t);
}
Function<String, Integer> safeStringLength = MyClass.ternary(condition, ifTrue, ifFalse);
Stream.of(strings).map(ternary(String::isEmpty, x -> "none", String::trim))...