【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

简介: 【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

本篇主要说明在Java8及以上版本中,使用stream().filter()来过滤List对象,查找符合条件的集合。

一、集合对象定义

集合对象以学生类(Student)为例,有学生的基本信息,包括:姓名,性别,年龄,身高,生日几项。

我的学生类代码如下:

package com.iot.productmanual.controller;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.util.List;
/**
 * <p>Student此类用于:学生信息实体 </p>
 * <p>@author:hujm</p>
 * <p>@date:2023年01月12日 18:36</p>
 * <p>@remark:注意此处加了Lombok的@Data、@AllArgsConstructor、@NoArgsConstructor注解,所以此类的Getter/Setter/toString/全参构造/无参构造都省略 </p>
 */
@Data
@ApiModel(value = "学生信息实体")
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Comparable<Student> {
    @ApiModelProperty("姓名")
    private String name;
    @ApiModelProperty("性别 true男 false女")
    private Boolean sex;
    @ApiModelProperty("年龄")
    private Integer age;
    @ApiModelProperty("身高,单位米")
    private Double height;
    @ApiModelProperty("出生日期")
    private LocalDate birthday;
    @Override
    public int compareTo(Student student) {
        return this.age.compareTo(student.getAge());
    }
    @Override
    public String toString() {
        return String.format("%s\t\t%s\t\t%s\t\t%s\t\t%s",
                this.name, this.sex.toString(), this.age.toString(), this.height.toString(), birthday.toString());
    }
    /**
     * 打印学生信息的静态方法
     *
     * @param studentList 学生信息列表
     */
    public static void printStudentList(List<Student> studentList) {
        System.out.println("【姓名】\t【性别】\t【年龄】\t\t【身高】\t\t【生日】");
        System.out.println("-----------------------------------------------------");
        studentList.forEach(s -> System.out.println(s.toString()));
        System.out.println(" ");
    }
}

二、添加测试数据

下面来添加一些测试用的数据,代码如下:

List<Student> studentList = new ArrayList<>();
// 添加测试数据,请不要纠结数据的严谨性
studentList.add(new Student("张三", true, 18, 1.75, LocalDate.of(2005, 3, 26)));
studentList.add(new Student("李四", false, 16, 1.67, LocalDate.of(2007, 8, 30)));
studentList.add(new Student("王五", true, 23, 1.89, LocalDate.of(2000, 1, 16)));
studentList.add(new Student("麻六", false, 27, 1.75, LocalDate.of(1996, 9, 20)));
studentList.add(new Student("刘七", false, 30, 1.93, LocalDate.of(1993, 6, 19)));
studentList.add(new Student("王八", false, 30, 1.75, LocalDate.of(1993, 6, 19)));

三、使用filter()过滤List

添加过滤条件,比如年龄小于25岁并且身高大于1米7的学生列表

// 输出没有过滤条件的学生列表
Student.printStudentList(studentList);
// 添加过滤条件,比如年龄小于25岁并且身高大于1米7的学生列表
List<Student> ageHeightList = studentList.stream().filter(student -> student.getAge() < 25 && student.getHeight() > 1.7).collect(Collectors.toList());
// 输出符合条件的学生列表
Student.printStudentList(ageHeightList);

结果如下图:

本文首发于CSDN,为博主原创文章,如果需要转载,请注明出处,谢谢!

本文完结!


相关文章
|
2月前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
43 3
|
2月前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
52 5
|
2月前
|
存储 Java 数据挖掘
Java 8 新特性之 Stream API:函数式编程风格的数据处理范式
Java 8 引入的 Stream API 提供了一种新的数据处理方式,支持函数式编程风格,能够高效、简洁地处理集合数据,实现过滤、映射、聚合等操作。
89 6
|
2月前
|
Rust 安全 Java
Java Stream 使用指南
本文介绍了Java中Stream流的使用方法,包括如何创建Stream流、中间操作(如map、filter、sorted等)和终结操作(如collect、forEach等)。此外,还讲解了并行流的概念及其可能带来的线程安全问题,并给出了示例代码。
|
5月前
|
存储 Java
Java编程中的对象和类
【8月更文挑战第55天】在Java的世界中,“对象”与“类”是构建一切的基础。就像乐高积木一样,类定义了形状和结构,而对象则是根据这些设计拼装出来的具体作品。本篇文章将通过一个简单的例子,展示如何从零开始创建一个类,并利用它来制作我们的第一个Java对象。准备好让你的编程之旅起飞了吗?让我们一起来探索这个神奇的过程!
43 10
|
5月前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
76 18
|
5月前
|
Java
Java 对象和类
在Java中,**类**(Class)和**对象**(Object)是面向对象编程的基础。类是创建对象的模板,定义了属性和方法;对象是类的实例,通过`new`关键字创建,具有类定义的属性和行为。例如,`Animal`类定义了`name`和`age`属性及`eat()`、`sleep()`方法;通过`new Animal()`创建的`myAnimal`对象即可调用这些方法。面向对象编程通过类和对象模拟现实世界的实体及其关系,实现问题的结构化解决。
38 4
|
6月前
|
机器学习/深度学习 人工智能 算法
探索人工智能在医疗诊断中的应用与挑战Java编程中的对象和类:基础与实践
【8月更文挑战第27天】随着人工智能(AI)技术的飞速发展,其在医疗领域的应用日益广泛。本文深入探讨了AI技术在医疗诊断中的具体应用案例,包括图像识别、疾病预测和药物研发等方面,并分析了当前面临的主要挑战,如数据隐私、算法偏见和法规限制等。文章旨在为读者提供一个全面的视角,理解AI在改善医疗服务质量方面的潜力及其局限性。
|
5月前
|
Java 程序员
Java编程中的对象和类: 初学者指南
【9月更文挑战第9天】在Java的世界中,对象和类构成了编程的基石。本文将引导你理解这两个概念的本质,并展示如何通过它们来构建你的程序。我们将一起探索类的定义,对象的创建,以及它们如何互动。准备好了吗?让我们开始这段Java的旅程吧!
|
6月前
|
存储 Java 程序员
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
93 4