java - 如何找到重复的行并在它们前面显示重复的次数

标签 java collections

是的,一个微不足道的问题,但我没有找到重复的问题。目前,来自这个集合(ArrayList):

Java
C#
Java
Python

我必须得到这个:(也就是说,每个单词都会遇到重复的次数)

Java 2
C# 1
Java 2
Python 1

目前我正在使用 Map,但它会删除重复项,这就是我得到的结果。

Java 2
C# 1
Python 1

这是我的代码:

      Map<String, Integer> map = new HashMap<>();
        for (String temp : array) {
            Integer count = map.get(temp);
            if (count != null){
                map.put(temp, count + 1);
            }
            else {
                map.put(temp, 1);
            }
        }

我有一个想法,将数据写入另一个列表,通过这个列表,将“父”列表的每个元素与新列表的所有元素进行比较。类似的东西:

List<String> resultList = new ArrayList<>();
List<String> mainList = new ArrayList<>();

    for (int i = 0; i < arrayList.size(); i++) {
        mainList.add(i,arrayList.get(i));
    }

    for (int i = 0; i < mainList.size(); i++) {
            int x = 1;
        for (String anArray : arrayList) {
            if (mainList.get(i).equals(anArray)) {
                resultList.add(i,mainList.get(i) + " "+ x++);
            }
        }
    }
    resultList.forEach(System.out::println);

它按我的需要工作,但在遇到重复项时也会创建一个额外的行。

Java 2
C# 1
Java 2
Python 1
Java 1
Java 1

在使用 List 的实现中,我遇到一个问题,它会将当前元素增加 1,但同时会创建另一个元素。

伙计们,如果有任何想法或线索可以指导我解决我的问题,我会很高兴!

UPD:这个问题的所有答案都是神圣的。感谢你们!在不冒犯他人的情况下选择正确的答案让我感到尴尬。

最佳答案

您可以使用 Collections.frequency在迭代列表以打印列表中每个单词的出现次数时:

public static void main(String[] args) {
    List<String> list = Arrays.asList("Java", "C#", "Java", "Python");
    list.forEach( s -> System.out.println(s + " " + Collections.frequency(list, s)));
}

输出:

Java 2
C# 1
Java 2
Python 1

关于java - 如何找到重复的行并在它们前面显示重复的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121032/

相关文章:

java - Openid 和数据类型

java - 屏幕录像机: how to use createScreenCaptureIntent() in a Service or IntentService?

java - 从 main 之外的方法访问类对象

java - 查找应该为每一行的一个参数至少定义一个值的记录

java - 通过谓词划分集合的库方法

java - RxJava 发出不同周期的项目

java - 保护映射免受 java 中线程的影响

collections - 如何通过结构相等检查结构集合中的结构?

java - 如何为带有子选择的查询编写 HIbernate 条件

java - 使 AnchorPane 可根据其父级调整大小