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 呀
没有,自己写接口。
相关阅读