§ ITPOW >> 文档 >> Java

Java Function 实现把函数当作参数传

作者:vkvi 来源:ITPOW(原创) 日期:2022-11-28
pubic Boolean hello(Function<Integer, Boolean> predicate) {
	return predicate.apply(0);
}

xxx.hello(m -> { return m >= 5; });
  • Function<Integer, Boolean> 表示参数类型是 Integer,返回值类型是 Boolean。

  • apply(0) 表示执行这个函数,参数传的是 0。

  • m -> { return m >= 5; } 是 lambda 表达式,m 就是参数。

顺道说一句,Java 的 lambda 表达式跟 C# 语法不同:

  • Java 是 ->,C# 是 =>

  • Java 即使一句也需要 {}、return、分号,而 C# 直接省略为 m >= 5。

Java:Function、Consumer、Supplier、Runnable

他们的区别是有没有参数、有没有返回值

public String testFunction(Function<Integer, String> function) {
  return function.apply(1);
}

public void testFunction2(Function<Integer, Void> function) {
  function.apply(2);
}

public void testConsumer(Consumer<Integer> consumer) {
  consumer.accept(0);
}

public String testSupplier(Supplier<String> supplier) {
  return supplier.get();
}

public void testRunnable(Runnable runnable) {
  runnable.run();
}

调用:

System.out.println(testFunction(m -> { return "Function 有参数有返回值,参:" + m; }));
testFunction2(m -> { System.out.println("Function 有参数有返回值,参:" + m); return null; });
testConsumer(m -> { System.out.println("Consumer 有参数无返回值,参:" + m); });
System.out.println(testSupplier(()-> { return "Supplier 无参数有返回值"; }));
testRunnable(() -> { System.out.println("Runnable 无参数无返回值"); });

结果:

  • Function 有参数有返回值,参:1

  • Function 有参数有返回值,参:2

  • Consumer 有参数无返回值,参:0

  • Supplier 无参数有返回值

  • Runnable 无参数无返回值

注意:

  • Function、Consumer、Supplier 的包为 java.util.function

  • Runnable 的包为 java.lang

  • 调用方法分别为:apply、accept、get、run

个人觉得吧,Java 把这事搞复杂了,搞 4 个东西出来,却没有一个支持两个参数的。

好吧,支持两个参数的来了:BiFunction

现在 5 个了……没完,还有 BiConsumer……

这么多,可是我只想要三个参数的 Function 呀

没有,自己写接口。

相关阅读

相关文章