给定一个元素列表,我想获取具有给定属性的元素并将其从列表中删除。我找到的最佳解决方案是:
ProducerDTO p = producersProcedureActive
.stream()
.filter(producer -> producer.getPod().equals(pod))
.findFirst()
.get();
producersProcedureActive.remove(p);
是否可以在lambda表达式中组合get和删除?
考虑使用vanilla java迭代器来执行任务:
public static <T> T findAndRemoveFirst(Iterable<? extends T> collection, Predicate<? super T> test) {
T value = null;
for (Iterator<? extends T> it = collection.iterator(); it.hasNext();)
if (test.test(value = it.next())) {
it.remove();
return value;
}
return null;
}
优势:
缺点:
至于那个
是否可以在lambda表达式中组合get和删除?
其他答案清楚地表明这是可能的,但你应该意识到
当从正在迭代的列表中删除元素时,可能会抛出[/li>
虽然这个线程已经很老了,但仍然被认为可以提供解决方案——使用Java8
。
使用RemveIF
函数。时间复杂度为O(n)
producersProcedureActive.removeIf(producer -> producer.getPod().equals(pod));
API参考:removeIf文档
假设:producersProcdureActive
是一个List
注意:使用这种方法,您将无法保留已删除的项目。
从列表中删除元素的步骤
objectA.removeIf(x -> conditions);
eg:
objectA.removeIf(x -> blockedWorkerIds.contains(x));
List<String> str1 = new ArrayList<String>();
str1.add("A");
str1.add("B");
str1.add("C");
str1.add("D");
List<String> str2 = new ArrayList<String>();
str2.add("D");
str2.add("E");
str1.removeIf(x -> str2.contains(x));
str1.forEach(System.out::println);
输出:A B C
当然,这些列表有setter和getter。现在我想实现以用户身份不参加这些事件的可能性。因此,我尝试了以下方法: 我得到的例外情况如下: 尽管我使用了一些方法来确保执行惰性提取:
问题内容: 对此问题的任何帮助将不胜感激。 我有一个元组列表 并且我需要删除某种类型的重复项:根据我的定义,(1,2)和(2,1)被视为重复项。所需输出 提前致谢 问题答案: 您可以对它们进行排序,然后使用删除重复项:
它返回-1,因为它在ArrayList中找不到ID,我只需要获取ID号并删除带有该ID号的整个ArrayList
问题内容: 我已经看过这篇文章: Python:通过删除每个第n个元素从现有列表构建新列表,但是由于某些原因,它对我不起作用: 我这样尝试: 此函数需要一个列表和。然后,它使用列表中的n步删除第n个元素,并打印结果。 这是我的函数调用: 错误的输出: 代替 然后我从上面的链接尝试了一个变体: 再次,函数调用: 给了我同样的错误的结果: 不是 如何正确地从列表中删除/删除/删除 第n个 项目? 问题
我有一个列表和一个字符串数组 我想检查列表A中是否存在元素,删除它,然后删除列表A中数组B中的元素, 如何在Java8中使用流在一行中完成? 这就是从列表A.stream()中删除元素的方式。过滤器(滤芯)-
问题内容: Google Python类| 清单练习- 给定一个数字列表,返回一个列表,其中所有相邻的==元素都已简化为单个元素,因此[1、2、2、3]返回[1、2、3]。您可以创建一个新列表或修改传入的列表。 我使用新列表的解决方案是- 问题甚至暗示可以通过修改传入列表来完成。但是,python文档警告不要在使用for循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找