跳到主要内容
  1. 所有文章/
  2. Java并发编程笔记/

函数式接口和流式计算

·📄 514 字·🍵 2 分钟

函数式接口 #

新时代的程序员必会四大技能:lambda表达式、链式编程、函数式接口、Stream流式计算

函数式接口:只有一个方法的接口,比如:

683398646b42b8c231d142c8ba7bfa2b.png

好处:简化编程模型,在新版本的框架底层中大量应用。

查看 JDK8以上的API文档 java.utils.function 中可以发现四大原生的函数式接口:

image-20220210103048248.png

Function函数型接口 #

参数是 T,返回值是 R

image-20220210105344749.png

import java.util.function.Function;

public class Main {
    public static void main(String[] args) {
        Function<String, String> function = (str) -> str;
        System.out.println(function.apply("aaaaaaaaaa"));
    }
}

Predicate断定型接口 #

参数是 T,返回值是 boolean

image-20220210105644417.png

import java.util.function.Predicate;

public class Demo2 {
    public static void main(String[] args) {
        Predicate<String> predicate = (str) -> {return str.isEmpty();};
        // false
        System.out.println(predicate.test("aaa"));
        // true
        System.out.println(predicate.test(""));
    }
}

Supplier供给型接口 #

没有参数,只有返回值

image-20220210105852540.png

import java.util.function.Supplier;
public class Demo3 {java
    public static void main(String[] args) {
        Supplier<String> supplier = ()->{return "1024";};
        System.out.println(supplier.get());
    }
}

Consumer消费型接口 #

只有参数,没有返回值

image-20220210110059905.png

import java.util.function.Consumer;
public class Demo4 {
    public static void main(String[] args) {
        Consumer<String> consumer = (str)->{
            System.out.println(str);
        };
        consumer.accept("abc");
    }
}

流式计算 #

与流计算有关的API在 java.utils.stream 里面,所有接口如下:

image-20220210122041195.png

/**
 * Description:
 * 题目要求: 用一行代码实现
 * 1. Id 必须是偶数
 * 2.年龄必须大于23
 * 3. 用户名转为大写
 * 4. 用户名倒序
 * 5. 只能输出一个用户
 **/
public class Main{
    public static void main(String[] args) {
        User u1 = new User(1, "a", 23);
        User u2 = new User(2, "b", 23);
        User u3 = new User(3, "c", 23);
        User u4 = new User(6, "d", 24);
        User u5 = new User(4, "e", 25);
        List<User> list = Arrays.asList(u1, u2, u3, u4, u5);
        // lambda、链式编程、函数式接口、流式计算
        list.stream()
                .filter(user -> {return user.getId()%2 == 0;})
                .filter(user -> {return user.getAge() > 23;})
                .map(user -> {return user.getName().toUpperCase();})
                .sorted((user1, user2) -> {return user2.compareTo(user1);})
                .limit(1)
                .forEach(System.out::println);
    }
}