在处理一个项目时,我需要能够找到列表中前三个对象。
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/