【问题标题】:Java consumers ability to accept and return boolean or stringJava 消费者接受和返回布尔值或字符串的能力
【发布时间】:2018-06-23 07:19:56
【问题描述】:

这是一个普通的消费者,有用法:

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

    consumer.accept(args[0]);
}

这是我正在尝试做的事情(让消费者返回布尔值)

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
}

如何操纵消费者以布尔值返回?

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

public interface ConsumerB {
    boolean accept(String s);
}

【问题讨论】:

标签: java lambda syntax interface


【解决方案1】:

返回某物的消费者不再是消费者。它变成了Predicate&lt;String&gt;

Predicate<String> consumer = (str) -> {
    return str.equals("yes"); 
};

您在标题中还提到您希望功能接口返回String。在这种情况下,请使用Function&lt;String, String&gt;

【讨论】:

  • Predicate 仅限于 boolean 作为返回类型。一般情况为Function&lt;T, R&gt;
  • @Turing85 我知道这一点。但从问题来看,OP 想要一个返回原始boolean 的功能接口。不能将原始的boolean 类型放入Function&lt;String, boolean&gt;,可以吗?
  • 你可以使用Function&lt;String, Boolean&gt;,但由于Predicate存在,它是多余的。 =)
【解决方案2】:

对于想要传递String 并获得boolean 的情况,可以使用Predicate&lt;String&gt;。如果要返回以下原语之一,则有类似的功能:

rest of the java.util.function-java.util.stream package 一致,对于基元byteshortcharfloat,没有进一步的To&lt;Primitive&gt;Function 接口。

对于想要传递String 并获得String 的情况,可以使用UnaryOperator&lt;String&gt;

对于想要传递一些T 并获得一些R 的一般情况,可以使用Function&lt;T, R&gt;

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2011-05-06
    • 1970-01-01
    • 2021-10-22
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多