四大核心函数式接口
1、jdk1.8的四大核心函数式接口
函数式接口 | 参数类型 | 返回值类型 | 描述 |
---|---|---|---|
Consumer | T | 无 | 处理一个接受T类型的值 |
Function | T | R | 处理T类型的值,并返回R类型的值 |
Supplier | 无 | T | 接受一个T类型的值 |
Predicate | T | boolean | 处理T类型的值,返回true或者false |
2、基本使用:
2.1、Consumer<T>接口,消费者接口
比如我们可以用来遍历:
创建一个实体类对象:
class Person {
private int age;
private String name;
// 构造 get,set,toString
}
进行遍历(比如遍历年龄)
List<Person> list = new ArrayList<>();
list.add(new Person(12, "fenfen"));
list.add(new Person(11, "孙行者"));
list.add(new Person(14, "猪八戒"));
list.add(new Person(15, "张无忌"));
list.foreach(a->System.out.println(a.getAge))
2.2、Function<T,R>接口,表示接受一个参数并产生结果的函数
比如我们实现一个字符串转大写的例子
public static String toUppString(String str,Function<String,String> fun){
return fun.apply(str);
}
// 进行调用
String str = toUppString("wesdfsdAAA",String::toUpperCase);
System.out.println(str);
2.3、Supplier<T>接口,供应商
比如我们需要返回10个随机数
public static List<Integer> getNums(int num, Supplier<Integer> s) {
List<Integer> integers = new ArrayList<>();
for (int i = 0; i < num; i++) {
integers.add(s.get());
}
return integers;
}
// 调用
List<Integer> nums = getNums(10, () -> new Random().nextInt(100));
nums.forEach(System.out::println);
2.4、Predicate<T>接口,断言接口
返回集合中包含字符串的所有项组成的新集合
public static List<String> filter(List<String> list, Predicate<String> p) {
List<String> list1 = new ArrayList<>();
for (String s : list) {
if (p.test(s)) {
list1.add(s);
}
}
return list1;
}
// 调用
List<String> list = new ArrayList<>();
list.add("avc");
list.add("agb");
list.add("arb");
list.add("avc");
List<String> avc = filter(list, (a) -> a.contains("avc"));
avc.forEach(System.out::println);