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

Java 如何从ArrayList中删除多余的值,但保留其中一个原始值?,java,arraylist,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); ArrayList a=新的ArrayList(); 而(a.尺寸()1){ t=真; } 返回t; } 方法实现: occ(ArrayLi

例如:

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

while(a.size() < 50){
        a.add(1);
        a.add(2);
        a.add(9);
    }
    System.out.println(a);
ArrayList a=新的ArrayList();
而(a.尺寸()<50){
a、 增加(1);
a、 增加(2);
a、 增加(9);
}
系统输出打印项次(a);
我想删除所有多余的1、2和9,但保留其中一个

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

已清除: [1,2,9]

理想情况下,我希望它适用于ArrayList中出现任意n次的任意x值

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

公共静态布尔occ(ArrayList l,int s){
int n=0;
布尔t=false;
对于(INTP:l){
如果(p==s){
n++;
}
}
如果(n>1){
t=真;
}
返回t;
}
方法实现:

occ(ArrayList,选中要检查的Int值)

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

Set Set=newHashSet(listWithDup);
发件人:

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


你不想使用
哈希集
LinkedHashSet
的原因是什么?不,但这些会有什么帮助?@HanKurschev:嗯,他们会保留每个值的一个示例,这就是集合所做的…这不是重复的,因为它保留了一个原始值。是的,我查看了它们,我会尝试一下。为什么不在第一部分中使用
newarraylist(newlinkedhashset(带有重复项))
?添加了streams版本。至于第一个——因为它可能不会保持原来的秩序。编辑:对不起,
LinkedHashSet
应该保留它。这样就可以了。对于许多代码来说,进行简单转换是比较好的。因此,最好使用duplicates.stream().collect(Collectors.toSet())
不,因为它不会保留顺序。从文档中可以看出:对于有序流,不同元素的选择是稳定的(…)
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;
}
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;
}
withDuplicates.stream().distinct().collect(Collectors.toList());
Set<Integer> set = new HashSet<Integer>(listWithDup);