概述
-
函数式接口:接口中只有一个抽象方法的接口
-
可以使用注解@FunctionalInterface修饰,可以检查是否是函数式接口
1 @FunctionalInterface
2 public interface Runnable {
3 public abstract void run();
4 }
Java8内置的四大核心函数式接口
-
Consumer<T>:消费型接口 void accept(T t)
1 public static void main(String[] args) {
2 happy(1000, (m) -> System.out.println("昨天花费了" + m + "元。"));
3 }
4
5 public static void happy(double money, Consumer<Double> consumer) {
6 consumer.accept(money);
7 }
-
Supplier<T>:供给型接口 T get()
1 public static void main(String[] args) {
2 List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
3 for (Integer num : numList) {
4 System.out.println(num);
5 }
6 }
7 public static List<Integer> getNumList(int num, Supplier<Integer> supplier) {
8 List<Integer> list = new ArrayList<>();
9
10 for (int i = 0; i < num; i++) {
11 Integer value = supplier.get();
12 list.add(value);
13 }
14
15 return list;
16 }
-
Function<T, R>:函数型接口 R apply()
1 public static void main(String[] args) {
2 String newStr = strHandler("\t\t\t hmz ", (str) -> str.trim());
3 System.out.println(newStr);
4 }
5 public static String strHandler(String str, Function<String, String> function) {
6 return function.apply(str);
7 }
-
Predicate<T>:断言型接口 boolean test(T t)
1 public static void main(String[] args) {
2 List<String> list = Arrays.asList("hello", "world", "Lambda", "hmz", "ok");
3 List<String> filterList = filterStr(list, (s) -> s.length() > 3);
4 System.out.println(filterList);
5 }
6
7 public static List<String> filterStr(List<String> list, Predicate<String> predicate) {
8 List<String> stringList = new ArrayList<>();
9
10 for (String str : list) {
11 if (predicate.test(str)) {
12 stringList.add(str);
13 }
14 }
15
16 return stringList;
17 }