有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从Java8中的方法返回Lambda?

我刚刚开始使用Java8,我想知道是否有一种方法可以编写一个返回Function的方法

现在我有如下方法:

Function<Integer, String> getMyFunction() {
  return new Function<Integer, String>() {
    @Override public String apply(Integer integer) {
      return "Hello, world!"
    }
  } 
}

有没有一种方法可以用Java8更简洁地编写?我本希望这能奏效,但事实并非如此:

Function<Integer, String> getMyFunction() {
  return (it) -> { return "Hello, world: " + it } 
}

共 (5) 个答案

  1. # 1 楼答案

    您缺少分号:

    return (it) -> { return "Hello, world: " + it; };
    

    尽管如前所述,它可以缩短为:

    return it -> "Hello, world: " + it;
    
  2. # 2 楼答案

    去掉函数定义中的return语句:

    Function<Integer, String> getMyFunction() {
        return (it) -> "Hello, world: " + it;
    }
    
  3. # 3 楼答案

    我想指出,在这种情况下,使用内置的^{}可能更合适:

    IntFunction<String> getMyFunction() {
        return it -> "Hello, world: " + it;
    }
    

    IntFunctionstandard API for functional interfaces的一部分,它定义了一系列好的接口,主要与Java原语相关

  4. # 4 楼答案

    你可以这样写:

    Function<Integer, String> function = n -> "Hello, world " + n;
    
  5. # 5 楼答案

    因此,@assylias给出了99%案例的答案

    You are missing semi colons:

    return (it) -> { return "Hello, world: " + it; }; Although as noted it can be shortened to:

    return it -> "Hello, world: " + it;

    然而,我认为,如果您想将lambda分配给一个变量(稍后使用),那么添加这一点是值得的。 您可以通过键入以下内容来执行此操作:

    Callable<YourClass> findIt = () -> returnInstanceOfYourClass();
    

    然后你就可以很容易地使用它,这是一个例子:

    if(dontNeedzToWrap()) {
                    return findIt.call();
      }
    return Wrapp.withTransaction(() -> findIt.call());
    

    如果Wrapp.withTransaction()方法接受相同类型的可调用参数,事情甚至可以变得更简单。 (我把这个用于JPA atm)