在这里,我正在从事类似的工作。由于明显的原因,类有所不同。只是说我上课
public class Division {
String className;
Map<String, Student> studentMap;
// getters and setters
}
和
public class Student {
String fName;
String lName;
String id;
// getters and setters
}
并且我有以下这些类的实例:
Student s1= new Student("Lisa", "xyz", "12");
Student s2= new Student("John", "klm", "13");
Student s3= new Student("Lisa", "xyz", "14");
Division d1= new Division();
Division d2= new Division();
Map<String, Student> studentMap1= new HashMap<>();
studentMap1.put("key1", s1);
studentMap1.put("key2", s2);
Map<String, Student> studentMap2= new HashMap<>();
studentMap2.put("key3", s3);
d1.setStudentMap(studentMap1);
d2.setStudentMap(studentMap2);
List<Division> dList= Arrays.asList(d1, d2);
在这里,请注意,我们在HashMap中使用的键在整个数据库中都是唯一的。 所以我可以用Java 7编写类似的代码来获取所有的StudentMap
获取所有学生的地图
Map<String, Student> allstudentsMap= new HashMap<>();
for(Division d: dList) {
for(String key:d.getStudentMap().keySet()) {
allstudentsMap.put(key, d.getStudentMap().get(key));
}
}
我还需要获取某些过滤条件的键列表。例如,获取名称为 Lisa 的学生的密钥列表。我可以使用上面的HashMap获取列表,如下所示:
List<String> filterList= new ArrayList<>();
Student s;
for(String key:allstudentsMap.keySet()) {
s= allstudentsMap.get(key);
if(s.getfName().equalsIgnoreCase("Lisa")) {
filterList.add(key);
}
}
我需要帮助来使用Java 8流做同样的事情。 1.获取所有学生的地图 2.获取某些过滤条件的所有键的列表。
答案 0 :(得分:2)
考虑到所有键在整个中都是唯一的,您可以将几张地图中的每个条目简单地放入最终地图中,如下所示:
Map<String, Student> allStudentsMap = new HashMap<>();
dList.forEach(d -> d.getStudentMap().forEach(allStudentsMap::put));
,然后在filter
上应用entrySet
并收集相应的密钥:
List<String> filterList = allStudentsMap.entrySet().stream()
.filter(e -> e.getValue().getfName().equalsIgnoreCase("Lisa"))
.map(Map.Entry::getKey)
.collect(Collectors.toList());