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":"老周"}
相关文章
|
13天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
33 5
|
25天前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
41 6
|
25天前
|
Java API 开发者
Java中的Lambda表达式与Stream API的协同作用
在本文中,我们将探讨Java 8引入的Lambda表达式和Stream API如何改变我们处理集合和数组的方式。Lambda表达式提供了一种简洁的方法来表达代码块,而Stream API则允许我们对数据流进行高级操作,如过滤、映射和归约。通过结合使用这两种技术,我们可以以声明式的方式编写更简洁、更易于理解和维护的代码。本文将介绍Lambda表达式和Stream API的基本概念,并通过示例展示它们在实际项目中的应用。
|
26天前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
37 4
|
16天前
|
Rust 安全 Java
Java Stream 使用指南
本文介绍了Java中Stream流的使用方法,包括如何创建Stream流、中间操作(如map、filter、sorted等)和终结操作(如collect、forEach等)。此外,还讲解了并行流的概念及其可能带来的线程安全问题,并给出了示例代码。
|
1月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
33 2
|
1月前
|
存储 Java
判断一个元素是否在 Java 中的 Set 集合中
【10月更文挑战第30天】使用`contains()`方法可以方便快捷地判断一个元素是否在Java中的`Set`集合中,但对于自定义对象,需要注意重写`equals()`方法以确保正确的判断结果,同时根据具体的性能需求选择合适的`Set`实现类。
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
1月前
|
Java 开发者