首页 > 编程语言 >【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

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

时间:2023-05-24 23:35:14浏览次数:60  
标签:Java stream List studentList toString Student import new LocalDate


本篇主要说明在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);

结果如下图:




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

本文完结!

标签:Java,stream,List,studentList,toString,Student,import,new,LocalDate
From: https://blog.51cto.com/u_16128050/6343399

相关文章

  • 【Java基础】map的遍历方式和map.forEach的使用
    Map的遍历方式常用的有两种,分为传统的map遍历方式和JDK1.8新的遍历方式,下面代码可以明显的看出其中的区别,话不多说,直接上代码,并执行结果,瞬间就能知道使用方式和对比结果了。importjava.util.HashMap;importjava.util.Map;/***<p>TestController此类用于:</p>*<p>@auth......
  • 【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.l
    本文目录一、背景描述二、问题原因原因1:缺少层级原因2:标点符号使用错误三、解决方案方案一:针对原因1方案二:针对原因2一、背景描述项目技术:springboot2.1.5.RELEASE+logback1.2.3项目启动报错:org.springframework.boot.context.properties.bind.BindException:Failedtobindp......
  • 【异常】java: Internal error in the mapping processor: java.lang.NullPointerExce
    本文目录一、背景描述二、错误原因三、解决方案一、背景描述项目背景:IDEA(2020.3)+Springboot(2.1.5.RELEASE)+maven报错内容:java:Internalerrorinthemappingprocessor:java.lang.NullPointerException二、错误原因错误原因还没有找到三、解决方案在使用mapstruct,IDEA......
  • Java PTA第1~3次题目集总结
    一.前言1.第一次题目集的知识点主要就是让我们初步意识到java与c语言不同的输入输出关键词用法以及一些相对固定的代码块(比如publicstaticvoidmain(String[]args){});题量相对较多但在承受范围之内;难度较为简单。2.第二次题目集的知识点除了跟第一次一样的之外,在7-1菜单题目里......
  • Java 泛型:理解和应用
    概述泛型是一种将类型参数化的动态机制,使用得到的话,可以从以下的方面提升的你的程序:安全性:使用泛型可以使代码更加安全可靠,因为泛型提供了编译时的类型检查,使得编译器能够在编译阶段捕捉到类型错误。通过在编译时检查类型一致性,可以避免在运行时出现类型转换错误和ClassCastE......
  • Java设计模式-建造者模式
    简介建造者模式是一种创建型设计模式,用于将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式通过将复杂对象的构建过程分解为多个简单的步骤来实现。与其他创建型模式不同,建造者模式强调的是将构建过程与表示分离,而不是将对象与其构建方式分离......
  • GPT-4通过了waitlist,私信爆了!
    上周发布了这篇文章:gpt4终于通过了waitlist,国内免魔法搞起!!!几天没看私信,今天一看竟然有30+多!都在询问我“为什么这么迅速?”“怎么申请到的”_,确实没什么窍门,就是比较早的一批申请下来的吧!我一直对技术比较敏感,所以官方刚刚公布,我就申请了,比较幸运。不过最近有传言,ChatGPT......
  • Java笔记(七):多线程
    Java默认有2个线程:main+GC并发:CPU单核,交替执行并行:CPU多核,多个线程可以同时执行(提高使用效率:线程池)Runtime.getRuntime().availableProcessors()//当前CPU可用核数多线程实现方式继承Thread类,重写run方法这样代码的写法简单,符合大家的习惯,但是直接继承Thread类有一......
  • java基于springboot+vue的书籍学习平台管理系统,学期学习论坛管理系统,附源码+数据库+lw
    1、项目介绍困扰管理层的许多问题当中,书籍学习将会是不敢忽视的一块。但是管理好书籍学习又面临很多麻烦需要解决,在工作琐碎,记录繁多的情况下将书籍学习的当前情况反应给相关部门决策,等等。在此情况下开发一款书籍学习平台,于是乎变得非常合乎时宜。经过网上调查和搜集数据,......
  • springboot项目启动报错java.lang.NoSuchMethodError: org.springframework.boot.buil
    产生此问题的原因是由于springboot版本兼容性导致的:java.lang.NoSuchMethodError:org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V2019-08-2918:04:54.089ERROR[restartedMain][SpringApplication.java:842]-Applicationrunfail......