现在我在php中有一些看起来像这样的东西:
$count = array_count_values($result);
arsort($count);
foreach($count as $key => $val){
$result[] = $key;
}
它将计算数组中的所有项目并将其放入键/值对中。这将删除重复项,然后我告诉它进行排序。然后我拿它的钥匙并存储它。有没有办法在 Java 中做到这一点?
现在我在php中有一些看起来像这样的东西:
$count = array_count_values($result);
arsort($count);
foreach($count as $key => $val){
$result[] = $key;
}
它将计算数组中的所有项目并将其放入键/值对中。这将删除重复项,然后我告诉它进行排序。然后我拿它的钥匙并存储它。有没有办法在 Java 中做到这一点?
我不相信 Java 具有与该功能等效的array_count_values
功能,因此您需要自己实现它。像这样的东西:
public static <T> Map<T, Integer> countValues(List<T> values) {
Map<T, Integer> result = new HashMap<T, Integer>();
// iterate through values, and increment its corresponding value in result
return result;
}
然后使用该java.util.Collections.sort(List list, Comparator c)
函数按计数对数组进行排序。您需要实现 Comparator 以按计数排序。
public class CountComparator<T> implements Comparator<T> {
private Map<T, Integer> counts;
public CountComparator(Map<T, Integer> counts) {
this.counts = counts;
}
public int compare(T o1, T o2) {
// assumes that the map contains all keys
return counts.get(o1).compareTo(counts.get(o2));
}
}
使用Multiset
Google Guava 库中的 a 来获取计数如何。它的工作方式与 PHP 的array_count_values
.
如果您希望它按键排序,请使用TreeMultiset
实现。
如果要按计数排序,请使用Multisets.copyHighestCountFirst