簡體   English   中英

使用Java中的HashMap打印出字符串重復項

[英]Printing out string duplicates with HashMap in Java

我有這個代碼:

HashMap<String, Integer> dupeMap = new HashMap<>();
                for (String name : sortWords)
                    if(dupeMap.containsKey(name)) {
                        int count = dupeMap.get(name);
                        dupeMap.put(name, ++count);
                    } else {
                        dupeMap.put(name, 1);
                    }

                System.out.printf("Duplicates: %s\n", dupeMap.entrySet());

我希望它在迭代我的ArrayList之后打印出重復項(它是事先創建的,它只是讀取給定的文件並按字母順序對字符串進行排序)。 截至目前,它以這種方式打印出重復的內容:

重復:[8 = 1,2 = 2,7 = 2,4 = 1]

有沒有辦法將它成對打印出來(key = value \\ n key = value等)並且沒有實際提到獨特的單詞?

我是地圖的新手,所以即使是這段代碼,我也要搜索stackoverflow,雖然我腦子里也有同樣的想法,但卻無法想出一個好的方法來編寫它。

過濾條目集以刪除值為1的元素:

List<Map.Entry<String, Integer>> dupes = dupeMap.entrySet()
    .stream()
    .filter(e -> e.getValue() > 1)
    .collect(Collectors.toList());

然后:

System.out.printf("Duplicates: %s\n", dupes);

您還可以在entrySet()上使用removeIf() (在JDK1.8中添加entrySet()來刪除僅出現一次的單詞,如下所示:

Set<Map.Entry<String, Integer>> elements = dupeMap.entrySet();
elements.removeIf(element->element.getValue() ==1);//removes words ocured only once
System.out.printf("Duplicates: %s\n",elements);

OUTPUT:

Duplicates: [Two=2, Seven=2]

如果您使用的是JDK1.7或更早版本,則需要使用Iterator安全刪除僅出現一次的單詞,如下所示:

Set<Map.Entry<String, Integer>> elements = dupeMap.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = elements.iterator();
while(iterator.hasNext()) {
   Map.Entry<String, Integer> element = iterator.next();
   if(element.getValue() ==1) {
       iterator.remove();
    }
}
System.out.printf("Duplicatesss: %s\n",elements);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM