gpt4 book ai didi

java - 根据条件过滤 ArrayList

转载 作者:行者123 更新时间:2023-12-02 06:01:01 26 4
gpt4 key购买 nike

我需要编写一个在最小和最大范围之间过滤 ArrayList 的方法。因此该方法接受 List、int min 和整数 max。这是我写的方法。

public static List<Integer> filterRange(final List<Integer> l3,int min,int max)
{
System.out.println(l3);
Iterator<Integer> iter = l3.iterator();
while (iter.hasNext()) {
int i=iter.next();
if (i<=max && i>=min) {
iter.remove();
}
}
System.out.println(l3);
return l3;

}

但是,这不会实现所需的功能。对此提出建议会很好。

谢谢

最佳答案

您需要获取每个元素,然后对其进行测试。目前,您连续调用 next() 两次。因此,如果您有一个包含 (1,2,3,4) 的列表并且您正在开始第一次迭代,则此行:

if (iter.next().intValue()<=6 && iter.next().intValue()>=2)

相当于:

if (1<=6 && 2>=2)

为了避免存储元素然后执行测试。

 while (iter.hasNext()) {
Integer i = iter.next();
if (i.intValue()<=6 && i.intValue()>=2) {
iter.remove();
}
}

请注意,您没有使用 minmax 参数值。我也不知道你为什么让你的方法通用。

<小时/>编辑后,远离原始帖子,问题是您在不知道列表是否包含某些元素的情况下调用 next() ,即使包含,它也会无限循环,因为您不知道在循环内调用 next() (因为 hasNext() 将始终返回 true)。所以应该是:

  while (iter.hasNext()) {
int i=iter.next();
if (i<=6 && i>=2) {
iter.remove();
}
}

请注意,您的列表可以包含 null 元素,因此此行 int i=iter.next(); 在尝试拆箱值时可能会抛出 NPE Integer 对象。

最后,如果您使用 (再次注意 null 元素)你可以这样做:

l.removeIf(i -> i >= min && i <= max);

关于java - 根据条件过滤 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22672228/

26 4 0