Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这是函数接口的正确用法吗?_Java_Lambda_Java 8 - Fatal编程技术网

Java 这是函数接口的正确用法吗?

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<

我正在努力熟悉lambda函数。首先,我决定编写一个名为
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))...