列出Java获取对象的arrayList中最常见的元素
我有一个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"));
我想获得该列表中最常见的3个组和指南。 在本例中:
Top 3 groups: "group a", "group b", "group c"
Top 3 guides: "Rachel", "Chandler", "Ross"
(导游的第三名可能是其他人,因为罗斯、莫妮卡、菲比和乔伊的出场次数相同)
我找到了像how to get the most common element in a list这样的好答案,但它只适用于ArrayList
个整数,并且只显示第一个最常见的元素
# 1 楼答案
试试这个,它会帮你的
# 2 楼答案
您可以为
groups
创建一个hashMap
结构,其中key
将是groupName
,值将是发生的次数然后,只需
sort
按值descending
对hashMap
结构进行descending
运算并得到结果# 3 楼答案
这是流的一个很好的用例。其思想是,首先将组的
List<TravelData>
转换为Map<String, Integer>
再转换为引导数(或引导到组数),然后按数字对该映射进行排序,只取映射的键(组/引导),并将其限制为前三个元素我假设TravelData有
String getGroup()
和String getGuide()
方法:# 4 楼答案
以下是我对Streams的解决方案