class Student {
int studentId;
String studentName;
String studentDept;
public Student() {}
}
我有这些学生物品清单,
List<Student> studentList;
我想从这些学生列表对象生成哈希图。
HashMap<Integer,String> studentHash;
hashmap包含sudentid和name list键值对。
比如:
studentList.stream().collect(
Collectors.toMap(Student::getStudentId, Student::getStudentName)
)
由于您显然需要Map
的特定实现,您应该使用方法Collectors.toMap
允许提供mapProviier
而不是toMap(函数
所以你的代码应该是这样的:
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(函数
Map<Integer,String> studentHash = studentList.stream().collect(
Collectors.toMap(s -> s.studentId, s -> s.studentName)
);
问题内容: 给定一个Person上具有(etc)方法的where,我该如何将其转换为通过调用获得的where ? 我会使用Java 8之前的版本 但我想使用流和lambda做到这一点。 我看不到如何以功能样式执行此操作:Map / HashMap不实现。 返回可以流式传输的,但是如何向目的地地图添加新的内容? 问题答案: 使用Java 8,您可以执行以下操作: 尽管使用Guava的Maps.tra
当我们将一个对象作为键插入到一个映射中时,它的哈希代码就会生成。但如果我的密钥是对象列表,那么,它是列表中所有对象哈希代码的总和吗? 请帮助理解。
我看不出如何在函数式中做到这一点:map/hashmap不实现。 返回一个,我可以对其进行流式传输,但如何将新的添加到目标映射?
假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?