java - 查找列表中重复出现次数最多的 3 个对象 - Java

标签 java list

在处理一个项目时,我需要能够找到列表中前三个对象。

private List<Object> listOfObjects = new ArrayList<Object>();
listOfObjects.add(object1);
listOfObjects.add(object2);
listOfObjects.add(object2);
listOfObjects.add(object3);
listOfObjects.add(object3);
listOfObjects.add(object3);
listOfObjects.add(object4);

如何显示此列表中重复出现的前 3 个对象? 我正在寻找的结果是这样的。

Your top results are:
object3
object2
object1

最佳答案

如果您使用的是 Java 8,则可以使用 Collectors.groupingBy 按出现次数对对象进行分组,如下所示:

Map<Object, Long> group = listOfObjects.stream()
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

要获得前三名,您可以使用:

group.entrySet().stream()
        .sorted(Map.Entry.<Object, Long>comparingByValue().reversed())
        .limit(3) // here you can use a variable for the number of the top object you want
        .forEach(entry -> System.out.println(entry.getKey() + " = " + entry.getValue()));

您必须@Override Object 类中的 equals 和 hashcode 方法。

<小时/>

我有一个简单的测试,我认为你的对象是一个字符串,例如:

List<Object> listOfObjects = new ArrayList<>();
listOfObjects.add("object1");
listOfObjects.add("object2");
listOfObjects.add("object2");
listOfObjects.add("object3");
listOfObjects.add("object3");
listOfObjects.add("object3");
listOfObjects.add("object4");

输出

object3 = 3
object2 = 2
object1 = 1

关于java - 查找列表中重复出现次数最多的 3 个对象 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50214198/

相关文章:

python - 按字典值对列表中的字典进行排序

c++ - 使用 C++ ifsteam 从文件读取到模板 vector

java - 在类的构造函数中初始化的实例变量在重写方法中变为 null

java - 将字符串转换为复杂的 OWL 公理

java - Spring MVC NoSuchMethodError 错误

algorithm - 序言数独 block 算法?

java - sts 或 eclipse 包资源管理器字体大小和排序右键单击选项

java - 使用 Java 中的基本类型创建具有内部矩阵表示的 Matrix 泛型类

java - 从 ant 文件中引用 ant 脚本位置

python - 在Python的列表中使用min函数获取AttributeError