- 我使用.stream()
来过滤由用户选择的名称初始化List并将其打印出来,但我无法获取排序列表以正确打印;它只打印白色空间。我认为这不是在列表中正确保存排序。我怎样才能解决这个问题?Java .stream()不保存List <>在.toList()中排序 - 打印空白
StudentFinder.java:
import java.util.*;
import java.util.stream.*; //throws error w/o it :(
public class StudentFinder {
//Print method
public static void contactPrint(List<Student> arr) {
for(int x = 0; x < arr.size(); ++x) {
System.out.println("[" + x + "]" + " Name: " + arr.get(x).name + " - ID: " + arr.get(x).id + " - GPA: " + arr.get(x).gpa);
}// end for loop
}// end contactPrint()
public static void main(String[] args) {
// "File" to hold Student's field 'name' info
String[] names = {
"Albert Einstein",
"Ada Lovelace",
"Blaise Pascal",
"Bruna Louise",
"Caroline Herschel",
"Cecilia Payne-Gaposchkin",
"Dorothy Hodgkin",
"Douglas Junior",
"Edwin Powell Hubble",
"Elizabeth Blackburn",
"Flossie Wong-Staal",
"Frieda Robscheit-Robbins",
"Geraldine Seydoux",
"Gertrude B. Elion",
"Ingrid Daubechies",
"Irma Sanchez",
"Jacqueline K. Barton",
"Johannes Kepler",
"Lene Vestergaard Hau",
"Lord Kelvin",
"Maria Mitchell",
"Max Planck",
"Nicolaus Copernicus",
"Niels Bohr",
"Patricia S. Goldman-Rakic",
"Patty Jo Watson",
"Richard Phillips Feynman",
"Rita Levi-Montalcini",
"Sarah Boysen",
"Stephen Hawking",
"Werner Karl Heisenberg",
"Wilhelm Conrad Roentgen"
};
int numStudents = names.length;
String holdUserInput;
//Create new Student object students
List<Student> students = new ArrayList<Student>();
// Initialize List of objects Student students with **CONSTRUCTOR**
for(int x = 0; x < numStudents; ++x) {
students.add(new Student(names[x], (100 + x), (double)((2.2 + (x + 2))))); // constructor
}
//Prints original object students
contactPrint(students);
//prompt user for input
System.out.println("Enter the first letter of the student's name:");
Scanner userInput = new Scanner(System.in);
holdUserInput = userInput.nextLine();//<<<******INT??? String???********
//handle user's input
List<String> studentsNames =
students.stream()
.filter(n -> n.getName().startsWith(holdUserInput.toUpperCase()))
.sorted(Comparator.comparing(Student::getName))
.map(Student::getName)
.collect(Collectors.toList());
//print sorted list
System.out.println(" \n");
for(int i = 0; i < studentsNames.size(); i++) {
System.out.println(studentsNames.get(i));
}
//end program message to user
System.out.println("Program Ended.");
}// end main()
}// end class StudentFinder
Student.java:
public class Student {
String name = "";
int id;
double gpa;
// constructor
public Student(String sName, int sId, double sGpa) {
name = sName;
id = sId;
gpa = sGpa;
}
//get name value to main()
public String getName() {
return name;
}
//get ID value to main()
public int getId() {
return id;
}
//get GPA value to main()
public double getGpa() {
return gpa;
}
}
不知道什么学生s'或'holdUserInput',我们不能重现这一点,因此我们不能建议什么是错的。 –
请提供一个能够证明您的问题的[mcve]。 – azurefrog
这是我的完整代码: [link](https://gist.github.com/lelecarabina/328fe78608594ceb07fff3c53dfd3e92) –