如何从ArrayList中删除多余的值但保留其中一个原始值?

时间:2016-08-23 12:21:25

标签: java arraylist

例如:

ArrayList<Integer> a = new ArrayList<Integer>();

while(a.size() < 50){
        a.add(1);
        a.add(2);
        a.add(9);
    }
    System.out.println(a);

我想删除所有多余的1,2&9和9,但保留其中一个。

未清除: [1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1] ,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2,9,1,2 ,9]

清除: [1,2,9]

理想情况下,我希望这适用于在ArrayList中任意多次出现的任何x值。

我的部分解决方案只返回一个值是否多次出现(如果它出现多次则为true,如果不出现则为false)

public static boolean occ(ArrayList<Integer> l, int s) {

    int n = 0;
    boolean t = false;

    for (int p : l) {
        if (p == s) {
            n++;
        }
    }

    if (n > 1) {
        t = true;
    }

    return t;
}

方法实施:

occ(ArrayList, Selected Int Value to be Checked);

如果我更改为HashSet或Set,我是否可以实现ArrayList方法clear()size()

2 个答案:

答案 0 :(得分:1)

public static List<Integer> withoutDuplicates(List<Integer> withDuplicates) {
    List<Integer> retVal = new ArrayList<>();
    Set<Integer> alreadyParsed = new HashSet<>();
    for (Integer val : withDuplicates) {
        if (!alreadyParsed.contains(val)) {
             retVal.add(val);
             alreadyParsed.add(val);
        }
    }
    return retVal;
}

或Java 8版本

withDuplicates.stream().distinct().collect(Collectors.toList());

答案 1 :(得分:1)

Set<Integer> set = new HashSet<Integer>(listWithDup);

来自doc

  

Set - 不包含重复元素的集合