Java 8 lambda get and remove element from list

2022-08-31 09:03:42

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

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

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


答案 1

从列表中删除元素

objectA.removeIf(x -> conditions);

例如:

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


答案 2

虽然线程很旧,但仍然认为提供解决方案 - 使用.Java8

利用功能。时间复杂度为removeIfO(n)

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

API 参考:删除如果文档

假设:是一个producersProcedureActiveList

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


推荐