[英]Get List<String> and HashMap<String, Object> using Java 8 streams
Here is something similar which I am working on my project. 这是我正在为项目工作的类似内容。 Classes are different for an obvious reason. 由于明显的原因,类有所不同。 Let's just say I have class 假设我有课
public class Division {
String className;
Map<String, Student> studentMap;
// getters and setters
}
and 和
public class Student {
String fName;
String lName;
String id;
// getters and setters
}
and I have instances for these classes as below: 我有这些类的实例,如下所示:
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);
Here, note that keys that we are using in HashMap are unique across db. 在这里,请注意,我们在HashMap中使用的键在整个数据库中都是唯一的。 so I can write something like this in Java 7 to get all the studentMap 所以我可以用Java 7编写这样的内容来获取所有的StudentMap
Get all students Map 获取所有学生的地图
Map<String, Student> allstudentsMap= new HashMap<>(); for(Division d: dList) { for(String key:d.getStudentMap().keySet()) { allstudentsMap.put(key, d.getStudentMap().get(key)); } }
I need to also get list of keys for some filter condition. 我还需要获取某些过滤条件的键列表。 eg get keys list for students with name Lisa . 例如,获取名称为Lisa的学生的钥匙清单。 I can get get a list using above HashMap as below: 我可以使用上面的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); } }
I need a help to do same thing using Java 8 streams. 我需要帮助才能使用Java 8流执行相同的操作。 1. Get all students Map 2. Get List of all keys for some filter condition. 1.获取所有学生的地图。2.获取某个过滤条件的所有键的列表。
Considering all keys are unique across , you could simply put every entry from several maps into your final map as: 考虑到所有键都是唯一的 ,您可以将几张地图中的每个条目简单地放入最终地图中,如下所示:
Map<String, Student> allStudentsMap = new HashMap<>();
dList.forEach(d -> d.getStudentMap().forEach(allStudentsMap::put));
and further, apply the filter
on the entrySet
and collect corresponding keys : 然后将filter
应用于entrySet
并收集相应的键:
List<String> filterList = allStudentsMap.entrySet().stream()
.filter(e -> e.getValue().getfName().equalsIgnoreCase("Lisa"))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.