java使用Stream流找出集合对象中最小值

简介: java使用Stream流找出集合对象中最小值

一、问题

有如下四个人,如何使用Lamdba找到年龄最小的并打印出来

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
public class Person {
    private String name;
    private  Integer age;
}
  List<Person> persons = Stream.of(new Person("老王", 35)
                , new Person("老张", 23)
                , new Person("老周", 56)
                , new Person("老李", 48))
                .collect(Collectors.toList());

二、使用sorted+limit

       persons.stream()
                .sorted((p1, p2) -> p2.getAge() - p1.getAge())
                .limit(1).forEach((person) -> {
            System.out.println("sorted+limit:" + JSON.toJSONString(person));
            //   sorted+limit:{"age":56,"name":"老周"}
        });

三、使用 sorted+skip(不推荐)

     persons.stream()
                .sorted((p1, p2) -> p1.getAge() - p2.getAge())
                .skip(persons.size() - 1).forEach((person) -> {
            System.out.println("sorted+skip:" + JSON.toJSONString(person));
            //      sorted+skip:{"age":56,"name":"老周"}
        });

四、使用max

        Optional<Person> max = persons.stream()
                .max((p1, p2) -> p1.getAge() - p2.getAge());
        max.ifPresent((person -> {
            System.out.println("max:" + JSON.toJSONString(person));
            //   max:{"age":56,"name":"老周"}
        }));

五、使用min(不推荐)

   Optional<Person> min = persons.stream()
                .min((p1, p2) -> p2.getAge() - p1.getAge());
        min.ifPresent((person -> {
            System.out.println("min:" + JSON.toJSONString(person));
            //    min:{"age":56,"name":"老周"}
        }));

六、使用reduce(推荐)

    Optional<Person> cacl2 = persons.stream()
                .reduce((p1, p2) -> p1.getAge() > p2.getAge() ? p1 : p2);
        cacl2.ifPresent(person -> {
            System.out.println("reduce" + JSON.toJSONString(person));
            //   reduce{"age":56,"name":"老周"}
        });

七、完整代码及结果

 private static void test01() {
        List<Person> persons = Stream.of(new Person("老王", 35)
                , new Person("老张", 23)
                , new Person("老周", 56)
                , new Person("老李", 48))
                .collect(Collectors.toList());
        System.out.println(JSON.toJSONString(persons));
        //[{"age":35,"name":"老王"},{"age":23,"name":"老张"},{"age":56,"name":"老周"},{"age":48,"name":"老例"}]
 
        //    找出年龄最大的人,并输入姓名和年龄
 
        persons.stream()
                .sorted((p1, p2) -> p2.getAge() - p1.getAge())
                .limit(1).forEach((person) -> {
            System.out.println("sorted+limit:" + JSON.toJSONString(person));
            //   sorted+limit:{"age":56,"name":"老周"}
        });
 
        persons.stream()
                .sorted((p1, p2) -> p1.getAge() - p2.getAge())
                .skip(persons.size() - 1).forEach((person) -> {
            System.out.println("sorted+skip:" + JSON.toJSONString(person));
            //      sorted+skip:{"age":56,"name":"老周"}
        });
 
        Optional<Person> max = persons.stream()
                .max((p1, p2) -> p1.getAge() - p2.getAge());
        max.ifPresent((person -> {
            System.out.println("max:" + JSON.toJSONString(person));
            //   max:{"age":56,"name":"老周"}
        }));
 
        Optional<Person> min = persons.stream()
                .min((p1, p2) -> p2.getAge() - p1.getAge());
        min.ifPresent((person -> {
            System.out.println("min:" + JSON.toJSONString(person));
            //    min:{"age":56,"name":"老周"}
        }));
 
 
 
        Optional<Person> cacl2 = persons.stream()
                .reduce((p1, p2) -> p1.getAge() > p2.getAge() ? p1 : p2);
        cacl2.ifPresent(person -> {
            System.out.println("reduce" + JSON.toJSONString(person));
            //   reduce{"age":56,"name":"老周"}
        });
 
    }
[{"age":35,"name":"老王"},{"age":23,"name":"老张"},{"age":56,"name":"老周"},{"age":48,"name":"老李"}]
sorted+limit:{"age":56,"name":"老周"}
sorted+skip:{"age":56,"name":"老周"}
max:{"age":56,"name":"老周"}
min:{"age":56,"name":"老周"}
reduce{"age":56,"name":"老周"}
相关文章
|
2月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
|
1月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
255 0
|
2月前
|
Java 大数据 API
Java Stream API:现代集合处理与函数式编程
Java Stream API:现代集合处理与函数式编程
235 100
|
2月前
|
Java API 数据处理
Java Stream API:现代集合处理新方式
Java Stream API:现代集合处理新方式
266 101
|
2月前
|
并行计算 Java 大数据
Java Stream API:现代数据处理之道
Java Stream API:现代数据处理之道
240 101
|
2月前
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
1月前
|
存储 算法 安全
Java集合框架:理解类型多样性与限制
总之,在 Java 题材中正确地应对多样化与约束条件要求开发人员深入理解面向对象原则、范式编程思想以及JVM工作机理等核心知识点。通过精心设计与周密规划能够有效地利用 Java 高级特征打造出既健壮又灵活易维护系统软件产品。
72 7
|
1月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
159 1
|
2月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
2月前
|
存储 数据可视化 Java
Java Stream API 的强大功能
Java Stream API 是 Java 8 引入的重要特性,它改变了集合数据的处理方式。通过声明式语法,开发者可以更简洁地进行过滤、映射、聚合等操作。Stream API 支持惰性求值和并行处理,提升了代码效率和可读性,是现代 Java 开发不可或缺的工具。
Java Stream API 的强大功能