示例阵列:[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
}
}
}
答案 0 :(得分:4)
你可以在Groovy中执行此操作:
class {"wlsdomain":
applications => hiera('wlsapplications', ""),
crontab => hiera_hash('crontab', ""),
generateWlsdomain => $generatewlsdomain,
}
或者
def result = names.countBy { it }
.findAll { k, v -> v > 1 }
.collect { k, v -> [k] * v }
.flatten()
答案 1 :(得分:2)
Groovy解决方案
我喜欢 @tim_yates 解决方案,但这是另一个解决方案:
def result = names.findAll{ names.count(it) > 1}
答案 2 :(得分:0)
这是一个非理想的想法:
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);
}
}
答案 3 :(得分:0)
在if语句中你可以简单地创建一个新的linkedList来存储重复的元素,并使用java.collections从Linked列表更改为array
答案 4 :(得分:0)
当然,有一个使用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();
答案 5 :(得分:0)
您还可以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]