Java 是否可以将.removeif()中的.size()用作ArrayList的条件?
在我正在编写的程序中,如果双精度小于某个值,我希望从ArrayList中删除双精度。但是,如果只剩下一个元素,即使它满足要删除的条件,我也不想删除它,因为我需要Arraylist不为空 我在javadoc for ArrayList中看到有一个RemoveFilter方法,所以我暂时写了以下内容: employeeLine.removiefccustomertime->customerTimeJava 是否可以将.removeif()中的.size()用作ArrayList的条件?,java,arraylist,Java,Arraylist,在我正在编写的程序中,如果双精度小于某个值,我希望从ArrayList中删除双精度。但是,如果只剩下一个元素,即使它满足要删除的条件,我也不想删除它,因为我需要Arraylist不为空 我在javadoc for ArrayList中看到有一个RemoveFilter方法,所以我暂时写了以下内容: employeeLine.removiefccustomertime->customerTime1; 例如,如果nextCustomerArrival=11.0,employeeLine=[2.0,5
MultiLaneSimulation.java:66: error: local variables referenced from a lambda expression must be final or effectively final
lines.get(j).removeIf(customer -> (customer < sequentialArrivalTime && lines.get(j).size() > 1));
^
1 error
所以,不要掷骰子。此外,我尝试在测试代码的主方法中测试它,它将删除所有元素,而不是除一个之外的所有元素。然后我尝试了一个for-each循环,但这导致我在主线程java.util.ConcurrentModificationException中得到了一个异常,所以没有骰子了
在这一点上,我将尝试编写一个助手方法,它可以满足我的需要。如果我能找到答案,我会把它贴出来作为其他人的答案/如果你好奇的话
Edit3:对于上下文,我基本上使用这些ArrayList作为排序队列first=Minimest->last=Maximum,因此我只对在这种情况下保留最后一个元素感兴趣
p.S.先发制人的道歉:我是第一次向SO发帖,我会称自己为Java新手。如果我说了或尝试了一些没有意义的话,我发誓我不是想迷惑你或让你生气,我只是还在学习。正如我承诺的那样,我能够编写一个帮助器方法来实现我所寻找的。我确信有一个更好的/更可靠的/更健壮的/等等的解决方案,但现在已经过了午夜,所以我会尽我所能。以下是我的创作:
/**
* Removes doubles from an ArrayList that are strictly less than the given parameter
* NOTE: leaves the last element if this would reduce the ArrayList.size() to 0
*
* @param minimumAllowedValue Of type Double; remaining values in the ArrayList will be greater than or equal to it
* @param list Of type ArrayList<Double>; the ArrayList we are changing
*/
public static void removeLessThan(Double minimumAllowedValue, ArrayList<Double> list) {
ArrayList<Double> toRemove = new ArrayList<Double>();
for (Double element : list) {
if (element < minimumAllowedValue) {
toRemove.add(element);
}
}
if (toRemove.size() == list.size()) {
toRemove.remove(list.size() - 1);
}
list.removeAll(toRemove);
}
这将是适用于您的条件的伪代码 1将列表中的最后一个元素保存到临时变量中 2移除所有小于最小允许值的元件 3如果删除了所有元素,则需要添加步骤1中保存的临时值
public static void removeLessThan(Double minimumAllowedValue, ArrayList<Double> list) {
Double lastElement = list.get(list.size() - 1); //Assuming List is not empty and contains atleast 1 element.
list.removeIf(element -> element < minimumAllowedValue);
if(list.isEmpty()) {
list.add(lastElement);
}
}
编译并检查。这应该行得通,真想不到为什么不行。。去看看吧。欢迎来到SO!当你提出一个问题时,试着增加一个最低限度的内容:输入样本、预期输出样本、你尝试了什么、研究和你在哪里卡住了。你试了什么?如果我没听错的话,你是想在里面写employeeLine.size,对吗?总的来说,我怀疑这是个坏主意,但我不知道这是否安全。如果你不得不选择你需要选择的一个,然后删除所有符合你标准的,然后添加所选的,如果你的列表为空,不是更好吗?我想它可能更容易阅读,它会让你描述如何选择一个要保留的值,如果需要的话……是的,这要简洁得多。非常感谢。