当前位置: 首页 > 知识库问答 >
问题:

从ArrayList中移除奇数元素

索正豪
2023-03-14
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。

我在第一行发现一个指向列表整数的错误

测试:

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]

共有3个答案

郑富
2023-03-14

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

问题是该方法的返回类型是< code>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发布的方法编辑你通过参数传递的列表,我的方法改为创建一个新列表,保持原始列表不变

仉刚洁
2023-03-14

如果您使用的是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]
庾奇思
2023-03-14

您应该使用迭代器从列表中删除项。这将节省存储奇数元素的临时列表的使用。

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

运筹学

你可以使用Java8获得更简单的代码。

 类似资料:
  • 问题内容: 我有这个arraylist: 如何构造语句,以便每500帧删除arraylist 中的最后一个元素?是否需要某种循环? 问题答案: 如果您已经有了一个变量,可以跟踪您所处的帧,则可以使用以下if语句: 由于您将其用作ArrayList的remove方法的参数,因此我也这样做了,但请注意,由于arrayList索引从0开始计数,因此它将始终删除arrayList中的第二个对象。 仅在帧数

  • 我正在用随机整数填充ArrayList。然后,当我试图删除它们时,我得到了以下错误: 线程“main”java.lang.indexoutOfboundsException:在java.base/jdk.internal.util.preconditions.outofbounds(preconditions.java:64)在java.base/jdk.internal.util.precond

  • 问题内容: 我有一堆索引,我想从中删除这些索引中的元素。我无法做一个简单的s 序列,因为每次移除后元素都会移动。我该如何解决? 问题答案: 按降序对索引进行排序,然后将其一一删除。如果这样做,删除将不会影响以后要删除的任何索引。 如何对它们进行排序将取决于您用来存储索引的集合。如果是列表,则可以执行以下操作: 编辑 @aioobe找到了我找不到的助手。除了上述内容,您还可以使用

  • 我知道有人问过这个问题,但我不能使用它的解决方案来做我想做的事情,我的问题是每次我从函数调用并输入一个Id,它总是告诉我Id被删除,即使我输入了一个从未输入的Id,它仍然打印相同的任何提示和帮助,将不胜感激:)注意:我不想在其中使用ArrayList这里是我的代码:

  • 我有一个名为arr的数组,大小为1024。所以基本上我想删除数组的第1X个元素。我该怎么做?我是这么想的:创建一个指针,指向数组的第一个值(ARR[0])。执行指针算术将其带到数组的第X个元素。然后将arr[0]设置为指针p,这将有效地移除前X个元素?这样行吗?或者有没有更简单的方法来移除数组的前X个元素?

  • 我创建了一个函数来删除数组中的一个特定元素,但正在努力解决的问题是,当我们从s.next()中获得要删除的元素的值时,它不是删除,而是当我们已经为它初始化了一个值时,它是删除