Pav*_*ala 1 java collections lambda java-8 java-stream
我正在尝试将 Student 对象列表转换为一个映射,其中键是整数(即 Student 对象的 rollno 字段),Value 是 Student 对象本身。
以下是我编写的代码:
package fibonacci;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class MApfor {
public static void main(String[] args) {
List<Student> maplist=new ArrayList<>();
maplist.add(new Student(1, "pavan"));
maplist.add(new Student(2, "Dhoni"));
maplist.add(new Student(3, "kohli"));
maplist.forEach(System.out::println);
Map<Integer,Student> IS=new HashMap<>();
IS = maplist.stream().collect(Collectors.toMap(a -> a.getRollNo,a);
}
}
Run Code Online (Sandbox Code Playgroud)
每当我尝试写最后一行时,即
IS = maplist.stream().collect(Collectors.toMap(a -> a.getRollNo,a);
Run Code Online (Sandbox Code Playgroud)
我无法检索 rollNo 字段,eclipse 没有显示建议,即每当我键入 a.get 将 rollNo 分配给键时,我无法这样做。
请提出我面临的问题。
package fibonacci;
public class Student {
public int rollNo;
public String name;
public int getRollNo() {
return rollNo;
}
public void setRollNo(int rollNo) {
this.rollNo = rollNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(int rollNo, String name) {
super();
this.rollNo = rollNo;
this.name = name;
}
@Override
public String toString() {
return " [rollNo=" + rollNo + ", name=" + name + "]";
}
}
Run Code Online (Sandbox Code Playgroud)
应该是这样的
maplist.stream().collect(Collectors.toMap(a -> a.rollNo, Function.identity()));
Run Code Online (Sandbox Code Playgroud)
或者更好的是使用带有方法引用的 getter。
maplist.stream().collect(Collectors.toMap(Student::getRollNo, Function.identity()));
Run Code Online (Sandbox Code Playgroud)
a -> a.getRollNo这是不正确的。您应该使用 public 字段或 getter。您没有正确使用。
当您说 时a.getRollNo,这意味着您的班级中应该有一个名为 getRollNo 的公共字段,这是不正确的。您的字段称为 rollNo。
那么如果要访问rollNo的getter方法,那么就应该像a.getRollNo()。(你最后失踪()了)。
但是你可以用这样的方法的引用Student::getRollNo也
所以它应该是其中之一
a -> a.rollNo
a -> a.getRollNo()
Student::getRollNo
Run Code Online (Sandbox Code Playgroud)
您可以替换Function.identity()用a -> a为好。