例如:
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()
?
答案 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)