我有一个 ArrayList
看起来是这样的:
ArrayList<TravelData> listOfTravels;
以及 TravelData
对象包含以下元素
int id;
String groupName;
String guideName;
以下是初始化arraylist的方法:
listOfTravels.add(new TravelData(1,"group a", "Ross"));
listOfTravels.add(new TravelData(2,"group a", "Chandler"));
listOfTravels.add(new TravelData(3,"group a", "Monica"));
listOfTravels.add(new TravelData(4,"group b", "Phoebe"));
listOfTravels.add(new TravelData(5,"group b", "Rachel"));
listOfTravels.add(new TravelData(6,"group c", "Joey"));
listOfTravels.add(new TravelData(7,"group c", "Rachel"));
listOfTravels.add(new TravelData(8,"group d", "Chandler"));
我想得到名单上最常见的三个组和指南。在本例中:
Top 3 groups: "group a", "group b", "group c"
Top 3 guides: "Rachel", "Chandler", "Ross"
(导游的第三名可能是其他人,因为罗斯、莫妮卡、菲比和乔伊的出场次数相同)。
我找到了很好的答案,比如如何获取列表中最常见的元素,但它只对 ArrayList
只显示第一个最常用的元素。
4条答案
按热度按时间yzxexxkh1#
这是流的一个很好的用例。我们的想法是,首先要改变
List<TravelData>
至Map<String, Integer>
从组到辅助线的数目(或从辅助线到组的数目),然后按数字对Map排序,只取Map的键(组/辅助线),并将其限制为前三个元素。我假设traveldata拥有
String getGroup()
以及String getGuide()
:在示例中使用java11类型推断
ar7v8xwq2#
这是我的解决方案。
ki0zmccv3#
你可以创造一个
hashMap
结构groups
在哪里key
将groupName
值将是出现的次数。那么,就
sort
这个hashMap
价值结构descending
然后得到结果。dxpyg8gm4#
试试这个,它会帮你的。