用Java中的HashMap打印重复的字符串

用Java中的HashMap打印重复的字符串,java,hashmap,Java,Hashmap,我有以下代码: HashMap<String, Integer> dupeMap = new HashMap<>(); for (String name : sortWords) if(dupeMap.containsKey(name)) { int count = dupeMap.get(name); d

我有以下代码:

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());
HashMap dupeMap=newhashmap();
for(字符串名称:sortWords)
if(双重映射容器(名称)){
int count=dupeMap.get(名称);
dupeMap.put(名称++计数);
}否则{
dupeMap.put(名称,1);
}
System.out.printf(“重复项:%s\n”,dupeMap.entrySet());
我希望它在遍历我的ArrayList之后打印出重复的内容(它是预先创建的,它只读取给定的文件并按字母顺序对字符串排序)。到目前为止,它通过以下方式打印副本:

重复项:[八=1,二=2,七=2,四=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());

您还可以在
entrySet()
上使用
removeIf()
(在JDK1.8中添加)删除只出现一次的单词,如下所示:

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

如果您使用的是JDK1.7或更早版本,则需要使用以安全删除仅出现一次的单词,如下所示:

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);
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);
Set elements=dupeMap.entrySet();
迭代器迭代器=elements.Iterator();
while(iterator.hasNext()){
Map.Entry元素=iterator.next();
if(element.getValue()==1){
iterator.remove();
}
}
System.out.printf(“重复项:%s\n”,元素);

您的意思是要删除计数为1的条目?是的,这和我要将键值对打印为常规StringsHanks!那很好用。但是,代码对我来说太高级了,你能解释一下第3行是什么吗?@Kirill你的意思是
.filter(e->e.getValue()>1)
?这只是说,流中应该只保留值大于1的条目(即计数大于1的单词)。谢谢,我甚至可能会使用JDK1.7代码,因为我的一个朋友建议我编写此代码,就像JDK1.8不存在一样(我想是为了更好地学习基础知识)。是的,理解迭代器的概念也很重要