private HashMap <Integer, String> ID_TAGS;
private HashMap <String, Integer> TAGS_ID;
private HashMap <String, String> TAGS_TRANSLATIONS;
private final ArrayList <Integer> INCLUSIONLIST;
private final ArrayList <Integer> EXCLUSIONLIST;
public DuplicationFinder(HashMap <Integer, String> id_tags, HashMap <String, String> tags_translations, ArrayList <Integer> exclusionList, ArrayList <Integer> inclusionList) {
this.ID_TAGS = id_tags;
this.TAGS_TRANSLATIONS = tags_translations;
this.INCLUSIONLIST = inclusionList;
this.EXCLUSIONLIST = exclusionList;
TAGS_ID = new HashMap <>();
for(Entry <Integer, String> e : ID_TAGS.entrySet()){
TAGS_ID.put(e.getValue(), e.getKey());
}
}
/**
* Findet die Duplikate und gibt die ID's zurück.
* @return
*/
public Set <Integer> findDuplicates(){
Set <Integer> duplicates = new LinkedHashSet <>();
for(Entry <Integer, String> e : ID_TAGS.entrySet()) {
HashMap <String, String> cloneWithoutTag= new HashMap <>(TAGS_TRANSLATIONS);
int id = e.getKey();
String tag = e.getValue();
cloneWithoutTag.remove(tag);
if(cloneWithoutTag.containsValue(TAGS_TRANSLATIONS.get(tag))) {
duplicates.add(id);
}
}
duplicates.addAll(EXCLUSIONLIST);
duplicates.removeAll(INCLUSIONLIST);
Iterator<Integer> nextD = duplicates.iterator();
while(nextD.hasNext()) {
System.out.println(lookUp(ID_TAGS.get(nextD.next())));
}
return duplicates;
}
public String lookUp(String tag) {
return TAGS_TRANSLATIONS.get(tag);
}
public int getID(String tag) {
return TAGS_ID.get(tag);
}
}
我不知道是否有人可以帮助我。我将尝试在TAGS_TRANSLATIONS-HashMap中找到一些具有相同值的键。我的想法是,当所选择的键不是地图的克隆时,您可以查看是否仍然存在相同的值。它到目前为止工作但我有一个问题,一些价值观,如&#34;会议&#34;只有一次在那里,也有输入。现在我将尝试找到错误。在此先感谢您的帮助:)
答案 0 :(得分:1)
假设您有以下地图:
Map<Tags, Translation> someMap;
您可以将所有值作为集合获取,其中包括重复项,然后使用Collections#frequency()
查找每个项目的频率。如果频率大于1,则翻译是重复的。
Collection<Translation> translations = someMap.values();
Set<Translation> dupeSet = new HashSet<>();
for (Translation t : translations) {
if (Collections.frequency(translations, t) > 1) {
dupeSet.add(t);
}
}
请注意,此代码将触及每个重复的翻译,但由于我们将重复项存储在一个集合中,因此给定的重复翻译应仅在最终结果中出现一次。