【问题标题】:How can I use ArrayList remove in loop java如何在循环 java 中使用 ArrayList remove
【发布时间】:2017-07-15 09:05:39
【问题描述】:

如果 scoreArray 中某个对象的值小于 scoreArray 中的任何其他对象,我想删除该值。但是我不知道如何在循环中删除 ArrayList 对象。

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

    for (int k = 0; k < people ; k++) {
            int compare = scoreArray.get(k);


            for (int j = 0; j < people; j++) {
                if(compare < scoreArray.get(j)){

                    //scoreArray.remove(k);

                    }
                } 

            }

【问题讨论】:

标签: java loops arraylist


【解决方案1】:

找到最小的元素,然后删除所有出现的:

int min = scoreArray.stream().min(Integer::compare).orElse(0);
scoreArray.removeAll(Collections.singletonList(min));

此解决方案比更紧凑的scoreArray.removeAll(Collections.min(scoreArray)) 更安全, 因为当scoreArray 为空时,这不会抛出NoSuchElementException

如果您只想删除第一次出现的最小值, 然后这样写:

if (!scoreArray.isEmpty()) {
  scoreArray.remove(scoreArray.stream().min(Integer::compare).get());
  // alternatively: scoreArray.remove(Collections.min(scoreArray));
}

【讨论】:

  • Collections.min(scoreArray) 简单一点。
  • @4castle Collections.min(scoreArray) 更简单但保存更少,因为如果scoreArray 为空,它将抛出NoSuchElementException。但这是一件好事,添加到我的回答中。
  • @janos 这取决于您对“不太安全”的定义。如果列表不应该是空的,那么例外是合适的。
  • @4castle 如果解决方案 A 在满足额外条件 X 时有效,而解决方案 B 在没有进一步知识的情况下始终有效,我认为这意味着解决方案 B 更安全。代码正确性的条件越少,精神负担就越小,出错的空间就越小。 Collections.min 可能应该被设计为返回 Optional&lt;T&gt; 而不是抛出。
  • 我想从 scoreArray 中获取一个元素,并与 scoreArray 中的其他元素进行比较。如果只有一次,这个元素比另一个小,我想删除它。这段代码能解决这个问题吗?我不知道我可以把这段代码放在哪里。请您再给我一些帮助吗?
【解决方案2】:

我相信您只想简单地删除最小值。这只需要一个 for 循环。

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

Integer smallestValue;
for (Integer i : scoreArray) {
    smallestValue = (smallestValue == null || smallestValue < i) ? i : smallestValue;
}

scoreArray.removeAll(Collections.singleton(smallestValue));

编辑:

我不擅长使用 Java 8 流,但如果您使用的是 Java 8+,请使用@Janos 提供的其他答案。更好更优雅。

【讨论】:

  • 不,我想从 scoreArray 中获取一个元素,并将其与 scoreArray 中的其他元素进行比较。如果只有一次,这个元素比另一个小,我想删除它。因此,应该删除的值不止一个。但是谢谢你的帮助:)
  • @sujin 很抱歉,我不明白你在问什么。我的代码就是这样做的?
猜你喜欢
  • 2017-11-25
  • 2020-02-22
  • 2015-05-02
  • 2012-11-07
  • 1970-01-01
相关资源
最近更新 更多