Java 过滤地图

Java 过滤地图,java,hashmap,Java,Hashmap,我有一个条目列表,其中条目具有studentId和subjectId属性 List<Candidate> candidates class Candidate { ... String studentId; String subjectId; } 列出候选人 班级候选人{ ... 弦乐学生; 字符串主语; } 目标是为多个学生订阅的科目绘制一张学生ID列表中的科目地图。 很明显,我可以通过迭代候选项(一个大的计数)来创建一个临时映射,稍后删除单个条目——这似乎是一个代价高昂的过

我有一个条目列表,其中条目具有studentId和subjectId属性

List<Candidate> candidates
class Candidate {
 ...
String studentId;
String subjectId;
}
列出候选人
班级候选人{
...
弦乐学生;
字符串主语;
}
目标是为多个学生订阅的科目绘制一张学生ID列表中的科目地图。
很明显,我可以通过迭代候选项(一个大的计数)来创建一个临时映射,稍后删除单个条目——这似乎是一个代价高昂的过程。
还有其他建议吗?
我们使用的是Java 1.7,当你说“昂贵”时,你的意思并不清楚但我会尝试一下

使用
Java8
,您可以使用
groupingBy
构造来创建

Map<String, List<Candidate> groupedResults = candidates.stream().collect(Collectors.groupingBy(Candidate::getSubjectId));
Map以下答案(已更正并完成):

Map Map=candidates.stream()
.collect(收集器.groupingBy(候选者::getSubjectId))
.entrySet().stream().filter(x->x.getValue().size()>1)
.collect(Collectors.toMap(x->x.getKey(),x->x.getValue().size());

您还可以使用
candidates.parallelStream()

对你来说大还是对电脑来说大?只要您的解决方案具有正确的顺序(大O)。。。没有那么多学校有数百万学生……你这样做是为了学习,而你的学校在Java 7被淘汰多年后仍在使用它?Java8已经有4年的历史了。为什么学校不升级?我想
Map
Map<String, Integer> map = candidates.stream()
        .collect(Collectors.groupingBy(Candidate::getSubjectId))
        .entrySet().stream().filter(x -> x.getValue().size()>1)
        .collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue().size()));