这几个接口经常与Lambda结合使用,网上当然也有很多介绍,不过有些过于繁琐,有些又偏简单,秉着实用主义精神,今天这里折中一下,把介绍的内容分为两部分,第一部分相当于TLDR,总结几个”口诀”,便于大家记忆,对于更想看用法示例的同学们,第二部分者提供了所有这些接口的示例。希望对大家有所帮助。
_√_如无参数,请使用Supplier(Use Supplier if it takes nothing)
_√_如无返回,请使用Consumer(Use Consumer if it returns nothing)
_√_如两者都无,请使用Runnable(Use Runnable if it does neither)
_√_如两者都有,请使用Function(Use Function if it does both)
_√_如返回布尔值,请使用Predicate(Use Predicate if it returns a boolean)
_√_如以上皆不可以,请使用自定义@FunctionalInteface(Use @FunctionalInteface if none of above works)
private static T testSupplier(Supplier supplier) { return supplier.get();}...Integer s = testSupplier(() -> 7 + 3); System.out.println(s);
private static void testConsumer(Consumer consumer, T data) { consumer.accept(data);}...testConsumer(System.out::println, "dummy");
private static void testRunnable(Runnable runnable) { runnable.run();}...testRunnable(() -> System.out.println("dummy"));
private static R testFunction(Function function, T data) { return function.apply(data);}...Integer f = testFunction((d) -> d * 2, 3); System.out.println(f);
private static boolean testPredicate(Predicate predicate, T data) { return predicate.test(data);}...boolean p = testPredicate((d) -> d > 0, 100); System.out.println(p);
public interface CalculationFuncInterface<T, U, R> { public R apply(T l, U i);}...private static R testFunctionalInterface(CalculationFuncInterface cal, T data1, U data2) { return cal.apply(data1, data2);}...Integer fi = testFunctionalInterface((a, b) -> a * b, 6, 7); System.out.println(fi);
今天的介绍就先到这,感谢大家,Cheers!
公众号”后厂村思维导图馆”,欢迎关注。
O’Reilly
纸质书(亦有一批PDF分享)!
Original: https://www.cnblogs.com/morvenhuang/p/10113608.html
Author: Morven.Huang
Title: Java Lambda基础——Function, Consumer, Predicate, Supplier, 及FunctionalInterface接口
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/537305/
转载文章受原作者版权保护。转载请注明原作者出处!