从数组中删除唯一值

时间:2017-04-18 11:47:28

标签: java arrays groovy

示例阵列:[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 
        } 
    } 
}

6 个答案:

答案 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]