今、私は次のような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
GoogleGuavaライブラリのを使用してカウントを取得するのはどうですか。PHPと同じように機能しますarray_count_values
。
キーで並べ替える場合は、TreeMultiset
実装を使用します。
カウントでソートする場合は、Multisets.copyHighestCountFirstを使用します