摘要:本文讲述了Java中的四大函数式接口,包括消费型、函数型、断言型和供给型这四种类型,根据常用的操作来理解四大函数式接口。
1. 消费型
消费型是来自java.util.function.Consumer类中的函数式接口,通过调用其.accept()方法来打印结果集(实现数据集的遍历)。
// Consumer<T> 消费型 打印结果集(遍历)
// Consumer<T> 消费型 .accept()
Consumer<ArrayList<Integer>> c = (li) -> {
for(int i = 0; i < li.size(); i++) {
System.out.println(li.get(i));
}
};
ArrayList<Integer> li = new ArrayList<>();
li.add(22);
li.add(33);
li.add(32);
li.add(45);
li.add(34);
c.accept(li); // 遍历集合
2. 函数型
函数型是来自java.util.function.Function类中的函数式接口,通过调用其.apply()方法来转换(或改变)对象,例如:实现对截取字符串、对象类型的转换等。
// Function<T, R> 函数型 转换对象 改变对象
// Function<T, R> 函数型 .apply()
// 截取字符串的一部分;
String str = "HelloWorld";
Function<String, String> f = (s) -> {
return s.substring(0,5);
};
String string = f.apply(str);
System.out.println(string);
// Function<T, R> 函数接口 T:形参 R:返回值
// 将ArrayList类型 转换成 HashSet
Function<ArrayList<Integer>, HashSet<Integer>> f1 = (list) -> {
HashSet<Integer> h = new HashSet<>();
h.addAll(list);
return h;
};
HashSet<Integer> h1 = f1.apply(li);
System.out.println(h1);
// 将ArrayList类型 转换成 HashSet : 简单的方式,一步到位
Set<Integer> collect = li.stream().collect(Collectors.toSet());
System.out.println(collect);
3. 断言型
断言型是来自java.util.function.Predicate类中的函数式接口,通过调用其.text()方法来实现对数据的过滤,就是将部分数据处理(或过滤)掉,而只得到满足某个条件的数据。
// Predicate<T> 断言型 过滤数据
// Predicate<T> 断言型 .test()
Predicate<Integer> p = (t) -> {
return t%2 == 0;
};
// 判断一个数是偶数 还是奇数
boolean test = p.test(12);
System.out.println(test);
System.out.println("-------------");
// li.stream().filter((e) -> {
// return e < 35; // 只得到满足该条件的数据
// }).forEach(System.out::println);
List<Integer> collect1 = li.stream().filter((e) -> {
return e < 35;
}).sorted().collect(Collectors.toList());
// sorted() : 排序
System.out.println(collect1);
4. 供给型
供给型是来自java.util.function.Supplier类中的函数式接口,通过调用其.get()方法来实现对数据的获取。
// Supplier<T> 供给型 得到数据
// Supplier<T> 供给型
Supplier<ArrayList<Integer>> s = () -> {
return li;
};
ArrayList<Integer> arrayList = s.get();
System.out.println(arrayList);