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);