按照arraylist中的次数对arraylist进行排序,然后删除重复项

时间:2012-08-27 20:56:30

标签: java list sorting arraylist duplicates

现在我在php中有一些看起来像这样的东西:

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

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

它会计算数组中的所有项目并将其放入键/值对中。这将删除重复项,然后我告诉它排序。然后我拿出它的钥匙并存放它。有没有办法在Java中做到这一点?

2 个答案:

答案 0 :(得分: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));
    }
}

答案 1 :(得分:0)

如何使用Google Guava库中的Multiset获取计数。它的工作方式与PHP的array_count_values类似。

如果您希望按键排序,请使用TreeMultiset实现。

如果您希望按计数排序,请使用Multisets.copyHighestCountFirst