如何使用Java Stream API筛选至少两门科目分数>80的学生
使用Java Stream API筛选符合条件的学生
首先需要补充Student类的构造方法(否则示例代码无法编译),同时可按需添加getter方法用于查看结果:
public class Student { private int stud_id; private String stud_name; private List<Integer> marks; // 构造方法 public Student(int stud_id, String stud_name, List<Integer> marks) { this.stud_id = stud_id; this.stud_name = stud_name; this.marks = marks; } // getter方法 public int getStud_id() { return stud_id; } public String getStud_name() { return stud_name; } public List<Integer> getMarks() { return marks; } }
在Demo类的main方法中,使用Stream API筛选至少有两门科目分数>80的学生,完整代码如下:
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Demo{ public static void main(String[] args) { List<Student> ls=new ArrayList<>(); ls.add(new Student(1,"Prasad",Arrays.asList(20,30,40,60))); ls.add(new Student(2,"Pratiksha",Arrays.asList(20,30,85,90))); ls.add(new Student(3,"Prasanthi",Arrays.asList(20,30,82,90))); // 筛选符合条件的学生 List<Student> qualifiedStudents = ls.stream() .filter(student -> // 统计当前学生分数>80的科目数量,判断是否≥2 student.getMarks().stream() .filter(mark -> mark > 80) .count() >= 2 ) .collect(Collectors.toList()); // 输出结果 qualifiedStudents.forEach(student -> System.out.printf("学生ID:%d,姓名:%s\n", student.getStud_id(), student.getStud_name()) ); } }
代码逻辑说明
- 调用
ls.stream()将学生列表转为Stream流; - 外层
filter方法中,对每个学生的marks列表生成子Stream,筛选出分数>80的元素后用count()统计数量,判断数量是否≥2; - 最后通过
collect(Collectors.toList())将符合条件的学生收集为新列表; - 示例中修改了部分学生的分数,确保有符合条件的结果便于验证。
内容的提问来源于stack exchange,提问作者user7283152
相关产品推荐
相关产品推荐

