如何使用lambda将下面的JavaScript示例转换为Java8中的相应代码。我正在尝试获得Java8的lambda。
虚构的例子。
// js
var isFlag = true,
name = (function () {
if (isFlag) return "A";
else return "B";
})();
console.log(name);
//outputs: A我尝试过用Java8编写它,但语法或其他方面有问题。请参见下面的代码。
// LambdaTest.java
class LambdaTest {
public LambdaTest() {
boolean isFlag = true;
String name = () -> { //I know this is wrong. It is not an IIFE. But how to write one?
if (isFlag) return "A";
else return "B";
};
System.out.println(name);
}
public static void main(String... args) {
LambdaTest lt = new LambdaTest();
}
}
// outputs:
// LambdaTest.java:4: error: incompatible types: String is not a functional interface
// String name = () -> {
// ^
// 1 error谢谢。
发布于 2013-02-04 18:46:34
我不是java程序员,但看起来像下面这样的东西能起到作用:
import java.util.concurrent.Callable;
import java.lang.String;
class LambdaTest {
public LambdaTest() {
boolean isFlag = true;
Callable<String> name = () -> {
if (isFlag) return "A";
else return "B";
};
try {
System.out.println(name.call());
} catch (Exception e) {
//cause call can throw exception so we need to handle that
}
}
public static void main(String... args) {
LambdaTest lt = new LambdaTest();
}
}发布于 2013-02-06 10:21:01
您必须提供一个“目标类型”,以便将lambda转换为一个功能接口的实例。如果您不想声明特定类型的变量,强制转换就可以做到这一点。然后,调用函数接口的方法。在这种情况下,我推荐使用Supplier,它不接受任何参数并返回类型T。Supplier的抽象方法是get(),所以这就是您要调用的方法。
试试这个:
import java.util.function.Supplier;
class LambdaTest {
public LambdaTest() {
boolean isFlag = true;
String name = ((Supplier<String>) () -> {
if (isFlag) return "A";
else return "B";
}).get();
System.out.println(name);
}
public static void main(String... args) {
LambdaTest lt = new LambdaTest();
}
}(从2013年1月中旬开始使用JDK8 early access build 73进行测试。)
发布于 2020-05-21 03:04:30
String name = ((Supplier<String>) () -> isFlag ? "A" : "B").get();不过,我不确定这是否是性能上的。
https://stackoverflow.com/questions/14683931
复制相似问题