JDK提供了大量常用的函数式接口以丰富Lambda的典型使用场景它们主要在java.util.function包中被提供。
我们介绍几种最常用的
一.内置函数Consumer
源码是这样的[无返回值]
public interface Consumer<T> {
/**
* Performs this operation on the given argument.
*
* @param t the input argument
*/
void accept(T t);
}
测试代码
/**
* TODO 类描述
*
* @author honghe
*/
public class Demo {
public static void main(String[] args) {
User user1 = new User("admin",11,"男");
Consumer<User> user2 = user -> user.setAge(0);
user2.accept(user1);
System.out.println("admin的age = [" + user1.getAge() + "]");
//结果为 admin的age = [0]
}
}
二.内置函数Supplier
源码是这样的[有个范型返回值]
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
测试代码
/**
* TODO 类描述
*
* @author honghe
*/
public class Demo {
//循环10次生成userList 年龄为每次循环的点值
public static void main(String[] args) {
List<User> userList = getUserList(5,()->new User("admin",100,"男") );
for (User u: userList) {
System.out.println("姓名 = [" + u.getName() + "]年龄 = ["+u.getAge()+"]");
}
}
public static List<User> getUserList(Integer sum,Supplier<User> userSupplier){
List<User> userList=new ArrayList<>();
for (int i = 0; i <sum ; i++) {
User user = userSupplier.get();
user.setAge(i);
userList.add(user);
}
return userList;
}
}
二.内置函数Function
/**
* TODO 类描述
*
* @author honghe
*/
public class Demo {
public static void main(String[] args) {
String hello = strChange("Hello", (str)->str.toLowerCase());
System.out.println(hello);
String subStr = strChange("这是Function的测试代码", (str)->str.substring(5,14));
System.out.println(subStr);
}
private static String strChange(String str,Function<String,String> fun){
return fun.apply(str);
}
}
二.内置函数Predicate
描述:Predicate< T>接口接受一个T类型参数,返回一个boolean值。
源代码
public interface Predicate<T> {
boolean test(T t);
}
测试代码
/**
* TODO 类描述
*
* @author honghe
*/
public class Demo {
//判断是否大于特定的需求 >5
public static void main(String[] args) {
Predicate<Integer> boolValue = x -> x>5;
Integer num1 = 1;
Boolean flag1 = boolValue.test(num1);
Integer num2 = 6;
Boolean flag2 = boolValue.test(num2);
System.out.println("flag1 = [" + flag1 + "]");// false
System.out.println("flag2 = [" + flag2 + "]");// true
}
}