四大函数式接口与Stream流式计算

四大函数式接口

1.函数 接口-Function <T, R>

  • 功能 :接收一个参数,返回一个结果。
  • 方法: R apply(T t);
  • 场景 :类型转换、数据映射。
  • 例子:
go 复制代码
Function<String, Integer> func = s -> s.length();
System.out.println(func.apply("Hello")); // 输出 5

2.断定接口-Predicate

  • 功能 :接收一个参数,返回 boolean 值。
  • 方法boolean test(T t);
  • 场景 :条件判断、过滤。
  • 例子
ini 复制代码
Predicate<Integer> predicate = x -> x > 10;
System.out.println(predicate.test(15)); // true
System.out.println(predicate.test(5));  // false

3.消费接口-Consumer

  • 功能:接收一个参数,没有返回值。
  • 方法void accept(T t);
  • 场景 :打印日志、消费消息、遍历操作。
  • 例子:
ini 复制代码
Consumer<String> consumer = s -> System.out.println("Hello, " + s);
consumer.accept("World"); // 输出 Hello, World

4.供给型接口 - Supplier

  • 功能 :不接收参数,返回一个结果。
  • 方法: T get();
  • 场景 :工厂方法、懒加载、随机数生成。
  • 例子:
scss 复制代码
Supplier<Double> supplier = () -> Math.random();
System.out.println(supplier.get()); // 输出随机数

Stream流式计算

Stream流式计算可以很好的简化代码,

下边这个例子:使用到了lambda表达式、链式编程、函数式接口、Stream流式计算

问题:

  • 从用户集合中过滤出 id > 3 且 age > 20 的用户
  • 取他们的名字并转换为大写
  • 按照名字倒序排序
  • 取第一个结果
  • 打印输出

只能使用一行代码完成。

ini 复制代码
public class StreamTest {
    public static void main(String[] args) {
        User user1 = new User(1,"a",18);
        User user2 = new User(2,"b",19);
        User user3 = new User(3,"c",20);
        User user4 = new User(4,"d",21);
        User user5 = new User(5,"e",22);

        List<User> list =  Arrays.asList(user1, user2, user3, user4, user5);

        list.stream()
                .filter(u->{return u.getId() > 3;})
                .filter(u ->{return u.getAge() > 20;})
                .map(u ->{return u.getName().toUpperCase();})
                .sorted((uu1,uu2) -> {return uu2.compareTo(uu1);})
                .limit(1)
                .forEach(System.out::println);
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
class  User{
    private Integer id;
    private String name;
    private Integer age;
}

最终输出结果是: E

流式计算里边都使用的是函数式接口。




相关推荐
小马爱打代码2 分钟前
Spring Boot:Sentinel 企业级熔断、降级与限流实战
spring boot·后端·sentinel
野犬寒鸦14 分钟前
从零起步学习并发编程 || 第二章:多线程与死锁在项目中的应用示例
java·开发语言·数据库·后端·学习
没有bug.的程序员19 分钟前
Spring Cloud Sentinel:熔断降级规则配置与分布式流量防线实战终极指南
java·分布式·后端·spring cloud·sentinel·熔断规则·分布式流量防线
JP-Destiny20 分钟前
后端-RabbitMQ
后端·消息队列·rabbitmq·java-rabbitmq
李慕婉学姐22 分钟前
【开题答辩过程】以《基于SpringBoot Vue的校园后勤管理系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
vue.js·spring boot·后端
咖啡啡不加糖28 分钟前
Arthas 使用指南:Java 应用诊断利器
java·spring boot·后端
努力也学不会java28 分钟前
【Spring Cloud】优雅实现远程调用-OpenFeign
java·人工智能·后端·spring·spring cloud
J_liaty29 分钟前
SpringBoot整合Canal实现数据库实时同步
数据库·spring boot·后端·canal
lead520lyq29 分钟前
Golang Grpc接口调用实现账号密码认证
开发语言·后端·golang
JaguarJack32 分钟前
Laravel AI SDK 在 Laracon India 2026 首次亮相
后端·php·laravel