首先参数是函数式接口类型的入参时,这个入参类型可以是lamda表达式代替。
1.Function:传入一个类型值返回一个类型值
源码:
@FunctionalInterface
public interface Function<T, R> {
/**
* Applies this function to the given argument.
*
* @param t the function argument
* @return the function result
*/
R apply(T t);
.......
}
示例一:
Function<String,String> function=new Function() {
@Override
public Object apply(Object o) {
return o;
}
};
String str1=function.apply("aaa");
System.out.println(str1);
示例二:
public static String validateValue(String name,Function<String,String> function){
return function.apply(name);
}
public static void main(String[] args){
String name="";
System.out.println(validateValue(name,inputStr -> inputStr.isEmpty()?"不能为空":inputStr));
}
inputStr相当于 apply方法的入参,inputStr.isEmpty()?"不能为空":inputStr相当于apply方法的实现(Lamda表达式)。以下同理。
2.Consumer: 传入一个类型值,没有返回值
源码:
@FunctionalInterface
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
...
}
示例:
public static void main(String[] args){
String name="aaa";
Consumer<String> consumer=new Consumer() {
@Override
public void accept(Object o) {
System.out.println(o+"===");
}
};
consumer.accept(name);
}
3.Predicate:一般用于做判断,返回boolean类型
源码:
@FunctionalInterface
public interface Predicate<T> {
/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);
...
}
示例一:
String name="bbb";
Predicate<String> predicate=new Predicate() {
@Override
public boolean test(Object o) {
return o.equals("aaa");
}
};
System.out.println(predicate.test(name));
示例二:
public static boolean validateValue(String name,Predicate<String> predicate){
return predicate.test(name);
}
public static void main(String[] args){
String name="aaa";
System.out.println(validateValue(name,inputStr -> inputStr.equals("aaa")? true:false));
}