Java8的stream,使用static对List students赋值放到Collectors打印出来,怎么改代码?

package com.graduation.project.dataCollector.test.stream;

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

public class studentStream {
    private List<Student> students;
    static{
        // 初始化
        List<Student> students = new ArrayList<Student>() {
            {
                add(new Student(20160001, "孔明", 20, 1, "土木工程", "武汉大学"));
                add(new Student(20160002, "伯约", 21, 2, "信息安全", "武汉大学"));
                add(new Student(20160003, "玄德", 22, 3, "经济管理", "武汉大学"));
                add(new Student(20160004, "云长", 21, 2, "信息安全", "武汉大学"));
                add(new Student(20161001, "翼德", 21, 2, "机械与自动化", "华中科技大学"));
                add(new Student(20161002, "元直", 23, 4, "土木工程", "华中科技大学"));
                add(new Student(20161003, "奉孝", 23, 4, "计算机科学", "华中科技大学"));
                add(new Student(20162001, "仲谋", 22, 3, "土木工程", "浙江大学"));
                add(new Student(20162002, "鲁肃", 23, 4, "计算机科学", "浙江大学"));
                add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大学"));
            }
        };
    }

    public static void main(String[] args) {
        List<Student> civilStudents = students.stream()
                .filter(student -> "土木工程".equals(student.getMajor())).limit(2)
                .collect(Collectors.toList());
    }
}
package com.graduation.project.dataCollector.test.stream;

import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Data;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    /** 学号 */
    private long id;

    private String name;

    private int age;

    /** 年级 */
    private int grade;

    /** 专业 */
    private String major;

    /** 学校 */
    private String school;

}

根据楼下的回答,修改完

package com.graduation.project.dataCollector.test.stream;

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

public class StudentStream {
    private static List<Student> students;
    static{
        // 初始化
        students = new ArrayList<Student>() {
            {
                add(new Student(20160001, "孔明", 20, 1, "土木工程", "武汉大学"));
                add(new Student(20160002, "伯约", 21, 2, "信息安全", "武汉大学"));
                add(new Student(20160003, "玄德", 22, 3, "经济管理", "武汉大学"));
                add(new Student(20160004, "云长", 21, 2, "信息安全", "武汉大学"));
                add(new Student(20161001, "翼德", 21, 2, "机械与自动化", "华中科技大学"));
                add(new Student(20161002, "元直", 23, 4, "土木工程", "华中科技大学"));
                add(new Student(20161003, "奉孝", 23, 4, "计算机科学", "华中科技大学"));
                add(new Student(20162001, "仲谋", 22, 3, "土木工程", "浙江大学"));
                add(new Student(20162002, "鲁肃", 23, 4, "计算机科学", "浙江大学"));
                add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大学"));
            }
        };
    }

    public static void main(String[] args) {
//        List<Student> civilStudents = students.stream()
//                .filter(student -> "土木工程".equals(student.getMajor())).limit(2)
//                .collect(Collectors.toList());
        students.stream()
                .filter(student -> "土木工程".equals(student.getMajor()))
                .limit(2)
                .forEach(System.out::println);
    }
}
阅读 3.4k
1 个回答

题主首先先回答你的问题
直接改为:

students.stream()
        .filter(student -> "土木工程".equals(student.getMajor()))
        .limit(2)
        .forEach(System.out::println);

这里解释哈,采用Stream对数据进行收集完之后,collect是把Stream中的数据收集起来,而forEach才是遍历每一个数据进行遍历处理的,这样就可以直接打印出来了

clipboard.png

不过有几点需要指出的是,题主这个贴的代码问题有点小多,copy过来编译都不过

  1. 既然对students进行静态模块的赋值,但是students竟然不是static的,所以private List<Student> students改为private static List<Student> students
  2. 竟然static模块在给students属性赋值的,那就不应该重新再声明一个属性List<Student> students了,List<Student> students = new ArrayList<Student>()改为students = new ArrayList<Student>()
  3. 最后有个小点... 类名studentStream 首字母请大写...非常别扭...studentStream改为StudentStream

以上就是答案哈~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题