Java使用者能够接受并返回布尔值或字符串

kay*_*kay 2 java syntax lambda interface

这是一个常规消费者用法:

public static void main(String[] args){
    Consumer<String> consumer = (str) -> {
        //stuff
    };

    consumer.accept(args[0]);
}
Run Code Online (Sandbox Code Playgroud)

这是我试图做的事情(使消费者返回布尔值)

public static void main(String[] args){
    Consumer<String> consumer = (str) -> {
        return str.equals("yes"); //type mis-match error because consumer is void not boolean
    };

    boolean a = consumer.accept(args[0]); //type mis-match error because consumer is void not boolean
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能操纵消费者以布尔值的形式返回?

没有明显创建一个全新的界面......(下)

public interface ConsumerB {
    boolean accept(String s);
}
Run Code Online (Sandbox Code Playgroud)

Tur*_*g85 11

String对于想要传递 a并获取 a的情况boolean,可以使用Predicate<String>. 如果想要返回以下原语之一,则有类似的函数:

-的其余部分java.util.function一致,原语、和没有进一步的接口。java.util.streamTo<Primitive>Functionbyteshortcharfloat

String对于想要传递 a并获取 a的情况String,可以使用UnaryOperator<String>.

对于想要传递一些T并获取一些的一般情况R,可以使用Function<T, R>.

然而,这是否提高了代码的可读性是另一个问题......


Swe*_*per 5

退货的消费者不再是消费者.它变成了Predicate<String>:

Predicate<String> consumer = (str) -> {
    return str.equals("yes"); 
};
Run Code Online (Sandbox Code Playgroud)

您还在标题中提到您希望功能界面返回a String.在那种情况下,使用Function<String, String>.

  • `Predicate` 仅限于 `boolean` 作为返回类型。一般情况是`Function&lt;T, R&gt;`。 (2认同)