我要根据出现次数对以下项目进行排序
我正在使用
List<Gender> list = query.list();
Set<Gender> unique = new HashSet<Gender>(list);
for (Gender key : unique) {
System.out.println(key + ": " + Collections.frequency(list, key));
}
但是上面的逻辑给出了相同的顺序,因为频率是基于完整列表而不是基于AssignedTo计数的。我想找到频率,然后根据频率对列表进行排序。
所有这些信息现在都存储在列表中。
答案 0 :(得分:1)
如果要从SQL数据库中进行查询,则可以对AssignedTo进行计数并使用group by,然后以降序返回它们。
如果这只是Java语言,请使用循环遍历列表,并对每个AssignedTo进行计数。
答案 1 :(得分:0)
您可以尝试调整以下示例程序以首先找到频率,然后根据已排序的linkedHashMap填充列表。
List<Gender> list = new ArrayList<>();
list.add(Gender.FEMALE);
list.add(Gender.MALE);
list.add(Gender.MALE);
list.add(Gender.FEMALE);
list.add(Gender.MALE);
list.add(Gender.FEMALE);
list.add(Gender.MALE);
Map<Gender,Long> frequency2 = list.stream().collect(
Collectors.groupingBy(Function.identity(),Collectors.counting())
).entrySet().stream().sorted(Map.Entry.comparingByValue()).collect(
(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
(oldValue, newValue) -> oldValue, LinkedHashMap::new)));
List<Gender> result = new ArrayList<>();
for (Map.Entry<Gender,Long> entry: frequency2.entrySet()) {
for (int i = 0; i < entry.getValue(); i++) {
result.add(entry.getKey());
}
}
System.out.println(result);