zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

List集合对象 查找 过滤 filter stream java8
2023-09-11 14:20:19 时间

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

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

代码实现

1.对象类 Teacher

import java.time.LocalDate;
import java.util.List;

/**
 * @author qzz
 */
public class Teacher{

    /**
     * 姓名
     */
    private String name;
    /**
     * 年龄
     */
    private Integer age;
    /**
     * true:男 false:女
     */
    private Boolean  gender;
    /**
     * 身高
     */
    private Double  height;
    /**
     * 身高
     */
    private LocalDate birthday;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getGender() {
        return gender;
    }

    public void setGender(Boolean gender) {
        this.gender = gender;
    }

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    public LocalDate getBirthday() {
        return birthday;
    }

    public void setBirthday(LocalDate birthday) {
        this.birthday = birthday;
    }

    public Teacher(String name,Boolean gender,Integer age,Double height,LocalDate birthday){
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.height = height;
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        String str=String.format("%s\t\t%s\t\t%s\t\t%s\t\t%s",
                this.name,this.gender.toString(),this.age.toString(),
                this.height.toString(),this.birthday.toString());
        return str;
    }

    public static void printTeachers(List<Teacher> list){
        System.out.println("[姓名]\t\t[性别]\t\t[年龄]\t\t[身高]\t\t[生日]");
        System.out.println("------------------------------------------");
        list.forEach(t-> System.out.println(t.toString()));
        System.out.println(" ");
    }
}

2.创建类ListFilter,测试实现list过滤效果

2.1添加测试数据

  //1.构建测试数据
  List<Teacher> list = new ArrayList<>();
  list.add(new Teacher("张三",true,26,1.76, LocalDate.of(1996,1,18)));
  list.add(new Teacher("小莉",false,21,1.61, LocalDate.of(2001,1,18)));
  list.add(new Teacher("李四",true,22,1.82, LocalDate.of(2000,1,18)));
  list.add(new Teacher("程曦",false,20,1.64, LocalDate.of(2002,1,18)));

2.2输出Teachers列表

  //2.输出list列表
  Teacher.printTeachers(list);

2.3使用filter()过滤List

 //3.使用filter()过滤list
        
 //查找身高在1.8米及以上的男生
 List<Teacher> teacherList = list.stream().filter(teacher -> teacher.getGender()
         && teacher.getHeight() >= 1.8).collect(Collectors.toList());
 //4.输出查找结果
 Teacher.printTeachers(teacherList);

 //查找年龄在20以上的女
 List<Teacher> tList = list.stream().filter(teacher -> !teacher.getGender()
         && teacher.getAge() >= 20).collect(Collectors.toList());
 //输出查找结果
 Teacher.printTeachers(tList);

2.4完整代码

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)
 * @author qzz
 */
public class ListFilter {

    public static void main(String[] args) {
        //1.构建测试数据
        List<Teacher> list = new ArrayList<>();
        list.add(new Teacher("张三",true,26,1.76, LocalDate.of(1996,1,18)));
        list.add(new Teacher("小莉",false,21,1.61, LocalDate.of(2001,1,18)));
        list.add(new Teacher("李四",true,22,1.82, LocalDate.of(2000,1,18)));
        list.add(new Teacher("程曦",false,20,1.64, LocalDate.of(2002,1,18)));

        //2.输出list列表
        Teacher.printTeachers(list);

         //3.使用filter()过滤list
        
        //查找身高在1.8米及以上的男生
        List<Teacher> teacherList = list.stream().filter(teacher -> teacher.getGender()
                && teacher.getHeight() >= 1.8).collect(Collectors.toList());
        //4.输出查找结果
        Teacher.printTeachers(teacherList);

        //查找年龄在20以上的女
        List<Teacher> tList = list.stream().filter(teacher -> !teacher.getGender()
                && teacher.getAge() >= 20).collect(Collectors.toList());
        //输出查找结果
        Teacher.printTeachers(tList);
    }
}

运行结果:
在这里插入图片描述