2017-08-10 66 views
0
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); 
} 

}查找重複的HashMap中

的價值,我不知道是否有人能幫助我與。我會嘗試在TAGS_TRANSLATIONS-HashMap中找到一些具有相同值的Keys。我的想法是,當所選的鍵不是整數的映射克隆,你可以看看是否仍然存在相同的值。它工作到目前爲止,但我有一個問題,像「會議」一些值只有一次在那裏,也得到了輸出。現在我會嘗試找到錯誤。預先感謝幫助:)

+1

你的代碼實際上做了什麼?你已經將這件事拋棄在我們身上,然後讓我們修復它。 –

+0

是的,這是我試圖解釋,我有HashMap與和這些標籤是指一個標籤,我在另一個HasMap <標籤,翻譯>實施。現在生病嘗試在翻譯中找到重複項,並且我想將該ID添加到重複項集中。但我有大約10重複,它不是沒有重複 –

+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); 
    } 
} 

注意,此代碼觸摸每個重複翻譯,但由於我們存儲一組重複的,給定的重複翻譯應該只有一次在最終結果出現。

+0

感謝這個答案,我做了一個稍微不同的方式。我現在使用一個包裝類,這使得這非常簡單。問題是我比較了來自2個數據庫的數據,一些標籤具有相同的ID,所以Set是這裏的問題。 –