【发布时间】:2018-03-27 20:13:18
【问题描述】:
我今天正在做一些来自 Codewars 的 katas。我必须编写一个函数,它只保留数组中的 N 个相同元素,例如:
{1,2,3,4,1}, N=1 -> {1,2,3,4}
{2,2,2,2}, N=2 -> {2,2}
我提出了使用流的解决方案:
public static int[] deleteNth(int[] elements, int maxOcurrences) {
List<Integer> ints = Arrays.stream(elements)
.boxed()
.collect(Collectors.toList());
return ints.stream().filter(x -> Collections.frequency(ints, x) <= maxOcurrences)
.mapToInt(Integer::intValue)
.toArray();
}
因此,首先将 int 更改为 Integers,然后在 freq 大于 N 时进行过滤。 但这不起作用,因为重复元素具有相同的频率,无论它们的位置如何。看起来值在过滤器调用之后被过滤了。如何解决此问题以获得正确的值?
PS:我知道那是 O(n^2),但这对我来说不是问题。
【问题讨论】:
-
是的,超出限制的出现应该被丢弃并且应该保持顺序
标签: java-8 java-stream