按项目频率排序数组Java请发送完整代码

时间:2018-09-23 17:26:01

标签: arrays

我想对数组进行排序并在计数上打印数组元素,如果出现9次4次则应首先打印9个,如果出现2次3次而出现5次4次则应在2个之前打印5个。

示例输入:

{1,1,1,3,3,4,5,5,9,9,9,9}

所需的输出:

{9,9,9,9,1,1,1,5,5,3,3,4}

1 个答案:

答案 0 :(得分:0)

这似乎是玩Java 8流的合理借口,所以就到这里了!

static int[] orderByFrequencyDesc(int[] input) {
    return Stream.of(IntStream.of(input).boxed()
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet())
            .flatMap(Set::stream).sorted((o1, o2) -> o2.getValue().equals(o1.getValue())
                    ? o2.getKey() - o1.getKey() : (int)(o2.getValue() - o1.getValue()))
            .flatMapToInt(e -> IntStream.generate(e::getKey).limit(e.getValue())).toArray();
}