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

Java8Lambda从列表中获取并删除元素

郎琪
2023-03-14

给定一个元素列表,我想获取具有给定属性的元素并将其从列表中删除。我找到的最佳解决方案是:

ProducerDTO p = producersProcedureActive
                .stream()
                .filter(producer -> producer.getPod().equals(pod))
                .findFirst()
                .get();
producersProcedureActive.remove(p);

是否可以在lambda表达式中组合get和删除?

共有3个答案

皇甫鸿远
2023-03-14

考虑使用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;
}

优势:

  1. 这是显而易见的

缺点:

  1. 不能作为单个表达式就地执行(需要辅助方法或变量)

至于那个

是否可以在lambda表达式中组合get和删除?

其他答案清楚地表明这是可能的,但你应该意识到

  1. 搜索和删除可能遍历列表两次
  2. 当从正在迭代的列表中删除元素时,可能会抛出[/li>

胡墨竹
2023-03-14

虽然这个线程已经很老了,但仍然被认为可以提供解决方案——使用Java8

使用RemveIF函数。时间复杂度为O(n)

producersProcedureActive.removeIf(producer -> producer.getPod().equals(pod));

API参考:removeIf文档

假设:producersProcdureActive是一个List

注意:使用这种方法,您将无法保留已删除的项目。

钱浩荡
2023-03-14

从列表中删除元素的步骤

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循环迭代列表时修改元素。 我想知道除了遍历列表之外还能做些什么呢?我不是在寻找