public static List<Integer> removeOddNumbers(ArrayList<Integer> list) {
if (list.isEmpty()) { throw new Error(); }
List<Integer> toRemove = new ArrayList<>();
for (int i : list) {
if (i % 2 != 0) { toRemove.add(i); }
}
list.removeAll(toRemove);
return list;
}
我正在尝试从ArrayList中删除所有奇数元素,然后返回该ArrayList。
我在第一行
中收到指向List Integer的错误测试
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
ArrayList<Integer> result = removeOddNumbers(arrayList);
System.out.println(result);
结果:
[6, 24, 8, 28]
答案 0 :(得分:2)
如果您使用的是Java 8,则可以使用Collection::removeIf:
list.removeIf(i -> i % 2 != 0);
完整方法应如下所示:
public static List<Integer> removeOddNumbers(List<Integer> list) {
list.removeIf(i -> i % 2 != 0);
return list;
}
示例强>
List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 6, 5, 4));
list.removeIf(i -> i % 2 != 0);
System.out.println(removeOddNumbers(list));
<强>输出强>
[2, 6, 4]
答案 1 :(得分:2)
你应该去Iterator从List中删除项目。这将节省存储奇数元素的临时列表的使用。
public static List<Integer> removeOddNumbers(List<Integer> arrayList) {
Iterator<Integer> itr = arrayList .iterator();
while (itr.hasNext())
{
int x = (Integer)itr.next();
if (x % 2 != 0) {
itr.remove();
}
}
return arrayList;
}
OR
使用Java8可以获得更简单的代码。
答案 2 :(得分:1)
lambda方式:
public static List<Integer> filter(List<Integer> numberList) {
return numberList.stream()
.filter(number -> number % 2 != 0)
.collect(Collectors.toList());
}
您应该使用以下方法调用此方法:
List<Integer> list = Arrays.asList(3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
List<Integer> result = removeOddNumbers(numbers);
System.out.println(result);
问题是该方法的返回类型为List<Integer>
,但您的代码期望ArrayList
解决方案只是使用泛型类List
或者如果您想使用代码它应该是这样的:
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Collections.addAll(arrayList, 3, 5, 6, 24, 7, 9, 1, 8, 28, 11);
List<Integer> result = removeOddNumbers(arrayList);
System.out.println(result);
N.B @YCF_L发布的方法会编辑您通过参数传递的列表,而我的方法会创建一个新列表,而原始列表不会受到影响
答案 3 :(得分:0)
// you can use Iterator.remove()
List arr = new ArrayList();
arr .add(10);
arr .add(20);
arr .add(30);
arr .add(1);
arr .add(2);
// Remove odd elements
// Iterator.remove()
Iterator itr = arr .iterator();
while (itr.hasNext())
{
int x = (Integer)itr.next();
if (x % 2 != 0)
itr.remove();
}
System.out.println("Modified ArrayList : " + arr);