鍍金池/ 問答/Java/ Java8的stream,使用static對List students賦值放到C

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, "土木工程", "武漢大學(xué)"));
                add(new Student(20160002, "伯約", 21, 2, "信息安全", "武漢大學(xué)"));
                add(new Student(20160003, "玄德", 22, 3, "經(jīng)濟(jì)管理", "武漢大學(xué)"));
                add(new Student(20160004, "云長", 21, 2, "信息安全", "武漢大學(xué)"));
                add(new Student(20161001, "翼德", 21, 2, "機(jī)械與自動化", "華中科技大學(xué)"));
                add(new Student(20161002, "元直", 23, 4, "土木工程", "華中科技大學(xué)"));
                add(new Student(20161003, "奉孝", 23, 4, "計算機(jī)科學(xué)", "華中科技大學(xué)"));
                add(new Student(20162001, "仲謀", 22, 3, "土木工程", "浙江大學(xué)"));
                add(new Student(20162002, "魯肅", 23, 4, "計算機(jī)科學(xué)", "浙江大學(xué)"));
                add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大學(xué)"));
            }
        };
    }

    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 {

    /** 學(xué)號 */
    private long id;

    private String name;

    private int age;

    /** 年級 */
    private int grade;

    /** 專業(yè) */
    private String major;

    /** 學(xué)校 */
    private String school;

}

根據(jù)樓下的回答,修改完

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, "土木工程", "武漢大學(xué)"));
                add(new Student(20160002, "伯約", 21, 2, "信息安全", "武漢大學(xué)"));
                add(new Student(20160003, "玄德", 22, 3, "經(jīng)濟(jì)管理", "武漢大學(xué)"));
                add(new Student(20160004, "云長", 21, 2, "信息安全", "武漢大學(xué)"));
                add(new Student(20161001, "翼德", 21, 2, "機(jī)械與自動化", "華中科技大學(xué)"));
                add(new Student(20161002, "元直", 23, 4, "土木工程", "華中科技大學(xué)"));
                add(new Student(20161003, "奉孝", 23, 4, "計算機(jī)科學(xué)", "華中科技大學(xué)"));
                add(new Student(20162001, "仲謀", 22, 3, "土木工程", "浙江大學(xué)"));
                add(new Student(20162002, "魯肅", 23, 4, "計算機(jī)科學(xué)", "浙江大學(xué)"));
                add(new Student(20163001, "丁奉", 24, 5, "土木工程", "南京大學(xué)"));
            }
        };
    }

    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);
    }
}
回答
編輯回答
解夏

題主首先先回答你的問題
直接改為:

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

這里解釋哈,采用Stream對數(shù)據(jù)進(jìn)行收集完之后,collect是把Stream中的數(shù)據(jù)收集起來,而forEach才是遍歷每一個數(shù)據(jù)進(jìn)行遍歷處理的,這樣就可以直接打印出來了

clipboard.png

不過有幾點(diǎn)需要指出的是,題主這個貼的代碼問題有點(diǎn)小多,copy過來編譯都不過

  1. 既然對students進(jìn)行靜態(tài)模塊的賦值,但是students竟然不是static的,所以private List<Student> students改為private static List<Student> students
  2. 竟然static模塊在給students屬性賦值的,那就不應(yīng)該重新再聲明一個屬性List<Student> students了,List<Student> students = new ArrayList<Student>()改為students = new ArrayList<Student>()
  3. 最后有個小點(diǎn)... 類名studentStream 首字母請大寫...非常別扭...studentStream改為StudentStream

以上就是答案哈~

2017年12月1日 13:51