class Student {
int studentId;
String studentName;
String studentDept;
public Student() {}
}
我有这些学生对象列表,
List<Student> studentList;
我想从这些学生列表对象生成哈希映射。
HashMap<Integer,String> studentHash;
hashmap包含sudentid和名单列表键值对。
答案 0 :(得分:3)
这样的事情:
studentList.stream().collect(
Collectors.toMap(Student::getStudentId, Student::getStudentName)
)
答案 1 :(得分:2)
由于您显然需要Map
的特定实施,因此您应该使用Collectors.toMap
方法,以便提供mapSupplier
而不是toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
因为即使在场景后面仍会返回HashMap
,它也没有明确指定到javadoc中,所以你无法确定它在下一版本的Java中是否仍然存在。
所以你的代码应该是这样的:
HashMap<Integer,String> studentHash = studentList.stream().collect(
Collectors.toMap(
s -> s.studentId, s -> s.studentName,
(u, v) -> {
throw new IllegalStateException(
String.format("Cannot have 2 values (%s, %s) for the same key", u, v)
);
}, HashMap::new
)
);
如果您不关心Map
的实施,只需使用toMap(Function<? super T,? extends K> keyMapper, Function<? super T,? extends U> valueMapper)
作为收集器作为下一个:
Map<Integer,String> studentHash = studentList.stream().collect(
Collectors.toMap(s -> s.studentId, s -> s.studentName)
);