我想对数组进行排序并在计数上打印数组元素,如果出现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}
答案 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();
}