伪代码,
Map <String, HashMap<String,List<Submission>>> assignmentMap = new HashMap();
Map <String, List<Submission>> submissionMap = new HashMap();
List <Submission> ls = new ArrayList();
ls.add(new Submission("student1"));
ls.add(new Submission("student2"));
submissionMap.put("studentSubmissions", ls);
assignmentMap.put("assignmentid1", submissionMap);
最后,我想得到所有studentSubmissions的数量(还有其他类型,如instrutorSubmission等)属于赋值1.在这种情况下2.如何用Java 8 Streams编写代码来实现它?
答案 0 :(得分:1)
以下是计算Submission
studentSubmissions
为assignmentid1
完成的所有long a = assignmentMap.entrySet().stream().
filter(e -> e.getKey().equals("assignmentid1")).
flatMap(i -> i.getValue().entrySet().stream()).
filter(k -> k.getKey().equals("studentSubmissions")).
flatMap(j -> j.getValue().stream()).
count();
的方法。
Submisson
如果同时删除这两个过滤器,则每个Submission
的每种类型的assignment
都会计算所有Collection
的计数。
但是,我想就另一个List
内Map
内的Map
(此处为Submission
)的嵌套做出评论。嵌套到这样的程度有以下缺点:
Class
列表。为了避免这种嵌套,您应该重新考虑Submission
设计。根据{{1}}值来区分String
的类型可能不是最佳选择。您可以使用Child
和StudentSubmission
的{{1}}课程来扩展InstructorSubmission
家长课程。