函数式接口 @FunctionalInterface @FunctionalInterface interface GreetingService { void sayMessage(String message); }
GreetingService greetService1 = message -> System.out.println("Hello " + message);(JAVA 8 之前一般是用匿名类实现)
转自 https://www.runoob.com/java/java8-functional-interfaces.html
lambda表达式条件:函数式接口。 表达形式:() -> {},即,参数,箭头,方法体。 lambda是个匿名函数,所以不需要方法名,只需要写出方法体就行。 Predicate<Integer> predicate = n -> n>5; Predicate<Integer> predicate = n -> n%2==0; predicate.test(11);
2.方法引用 Predicate<Integer> predicate = n -> n%2==0;
一个程序里,很多地方写了类似这样的条件,碰到需求变更,需要一个一个去改。解决的方法:将条件写在一个方法里,集中在一起,方便改。 Predicate<Integer> predicate = n ->calculate(n);
private static boolean calculate(int n){ return n%2==0; }
方法引用语法,方法的隶属类::方法名, 例如,将这些写了条件的方法,全部其中到一个类,CalculateGroup public class CalculateGroup{
public static boolean calculate1(int n){ return n%2==0; }
public static boolean calculate2(int n){ return n>0; }
public static boolean calculate3(int n){ return n<5; } }
由这个表达Predicate<Integer> predicate = n ->calculate(n);可以换成以下表达(等价) Predicate<Integer> predicate = CalculateGroup::calculate1;
。。。
|