You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java是否有类似Kotlin的简便Lambda变量声明方式?

Kotlin中的Lambda写法示例
val myLambda: (Int, Int) -> Unit = { a, b ->
    Log.d(TAG, "sum value = ${a + b}")
}
myLambda(1, 2)//调用Lambda
Java中的两种实现方式

方式一:Runnable

这种方法的问题是Runnable无法接收参数。

// Runnable方式
Runnable runnable = () -> {
    System.out.println("x");
};
runnable.run();

方式二:自定义接口

这种方法的问题是我需要为不同类型声明多个接口。

// 自定义接口方式
Finder finder = (s1, s2) -> s1.indexOf(s2);
System.out.println(finder.find("1234", "23"));

public interface Finder {
    public int find(String s1, String s2);
}

问题与解答

作为Java新手,想请教是否存在比这两种方法更简便的Lambda实现方式?

当然有,Java 8及以后提供了大量内置的函数式接口,可以直接复用,不用自己定义新接口,完美解决你提到的两个问题:

  • 如果你需要实现接收两个参数、无返回值的逻辑(对应Kotlin示例里的(Int, Int) -> Unit),可以用BiConsumer接口:
// 使用BiConsumer实现类似Kotlin的求和打印逻辑
BiConsumer<Integer, Integer> sumPrinter = (a, b) -> {
    System.out.println("sum value = " + (a + b));
};
sumPrinter.accept(1, 2);
  • 如果你需要接收参数并返回结果(比如自定义Finder的场景),可以根据参数和返回值的数量选择对应接口:
    • 接收两个参数、返回一个结果用BiFunction:
BiFunction<String, String, Integer> finder = (s1, s2) -> s1.indexOf(s2);
System.out.println(finder.apply("1234", "23"));
  • 接收单个参数、返回结果用Function;无参数有返回值用Supplier;接收单个参数无返回值用Consumer,这些接口都在java.util.function包下,直接导入即可使用。

这些内置接口覆盖了绝大多数常用的Lambda场景,无需再为每种参数/返回值组合自定义接口,比你之前的两种方法更简便灵活。

内容的提问来源于stack exchange,提问作者Vaishnav Kanhirathingal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:03:49