[英]Remove unique values from array
数组示例:[1,2,3,4,4,5,6,7,12,13,7,4]
我只想保留多个值。 因此,我期望的最终结果是[4,4,4,7,7]
我可以找到重复项,如下所示。 但是我该如何扭转呢? 任何指导表示赞赏。 谢谢。
for (int i = 0; i < names.length; i++) {
for (int j = i + 1; j < names.length; j++) {
if (names[i].equals(names[j]) ) {
// got the duplicate element
}
}
}
您可以在Groovy中执行以下操作:
def result = names.countBy { it }
.findAll { k, v -> v > 1 }
.collect { k, v -> [k] * v }
.flatten()
要么
def result = names - names.countBy { it }.findAll { k, v -> v == 1 }.keySet()
Groovy解决方案
我喜欢@tim_yates解决方案,但这是另一个解决方案:
def result = names.findAll{ names.count(it) > 1}
这是一个非最佳的想法:
Integer count;
for (int i = 0; i < names.length; i++) {
count = 0;
for (int j = i + 1; j < names.length; j++) {
if (names[i].equals(names[j]) ) {
count++;
}
}
if(count == 1){
count = 0;
ArrayUtils.removeElement(names, i);
}
}
在if语句中,您可以简单地创建一个新的linkedList来存储重复的元素,并使用java.collections从Linked列表更改为array
当然,还有使用Java 8 Streams的解决方案...。
int[] ia = {1,2,3,4,4,5,6,7,12,13,7,4};
List<Integer> list = Arrays.stream(ia).boxed().collect(Collectors.toList());
ia = list.stream()
.filter(x -> Collections.frequency(list, x) > 1)
.mapToInt(Integer::valueOf).toArray();
您还groupBy
按身份groupBy
,取值,仅保留大于1的值,并合并结果:
[1,2,3,4,4,5,6,7,12,13,7,4]
.groupBy()
.values()
.findAll{it.size()>1}
.sum()
// [4, 4, 4, 7, 7]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.