2

今、私は次のようなphpの何かを持っています:

$count = array_count_values($result);
arsort($count);

foreach($count as $key => $val){
    $result[] = $key;
}

配列内のすべてのアイテムをカウントし、キーと値のペアに入れます。これにより重複が削除され、並べ替えるように指示されます。それから私はそれの鍵を取り、それを保管します。Javaでこれを行う方法はありますか?

4

2 に答える 2

2

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));
    }
}
于 2012-08-27T21:11:51.057 に答える
0

MultisetGoogleGuavaライブラリのを使用してカウントを取得するのはどうですか。PHPと同じように機能しますarray_count_values

キーで並べ替える場合は、TreeMultiset実装を使用します。

カウントでソートする場合は、Multisets.copyHighestCountFirstを使用します

于 2012-08-27T21:10:58.453 に答える