如何从静态函数 return 函数接口?

How to return a Function Interface from a static function?

我在静态方法中使用 Function<String, String>,该方法预期 return 一个值

它接受一个输入,return一个输出,如何return从该方法返回值?

public static String getAnimalName(String name)
{
    Function<String, String> getNameFunc = (inputName)->
    {
        return  inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
    };
    return "";
}

接口 java.util.function.Function 包含一个名为 apply 的抽象方法。因此,您需要显式调用该方法。

lambda expression是接口的实际实现。

public static String getAnimalName(String name) {
    Function<String, String> getNameFunc = (inputName) -> {
        return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
    };
    return getNameFunc.apply(name);
}

请注意,您可以将 lambda 表达式简化为

Function<String, String> getNameFunc = inputName -> inputName.equalsIgnoreCase("cat") ? "dog" : "rat";

你在做什么没有多大意义。您在函数内声明了一个 Function<String, String>,但没有使用它。另外我不确定你传递给函数的参数的目的是什么。

根据您的代码,我确定了三个有意义的变体,但根据您的问题标题,我认为您正在寻找解决方案 1。

  1. Return a Function<String, String> 并从 getAnimalNameFunction

    中删除参数
    public static Function<String, String> getAnimalNameFunction() {
        Function<String, String> getNameFunc = (inputName) -> {
            return inputName.equalsIgnoreCase("cat") ? "dog" : "rat";
        };
        return getNameFunc;
    }
    

    然后在其他一些代码中..

    Function<String, String> nameConverter = getAnimalNameFunction();
    String name = nameConverter.apply("cow");
    
  2. 保留参数,但 return 一个 Supplier<String> 代替:

    public static Supplier<String> getAnimalNameSupplier(String name) {
        Supplier<String> getNameSup = () -> {
            return name.equalsIgnoreCase("cat") ? "dog" : "rat";
        };
        return getNameSup;
    }
    

    然后在其他一些代码中..

    Supplier<String> nameGetter = getAnimalNameSupplier("cow");
    String name = nameGetter.get();
    
  3. Return a String(和你原来做的一样)并删除中间的 Function<String, String>

    public static String getAnimalName(String name)
    {
        return name.equalsIgnoreCase("cat") ? "dog" : "rat";
    }
    

    然后在其他一些代码中..

    String name = getAnimalName();
    

我不确定您尝试实现的是三个中的哪一个,但我希望这能对问题有所启发。