有条件地从Java 8中的List中删除元素[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有条件地从Java 8中的List中删除元素[重复]相关的知识,希望对你有一定的参考价值。

据我所知,Java 8引入了一种可用于Collection类型的新方法:removeif()。它接受一个谓词,该谓词定义了应该删除元素的条件。它返回一个布尔值,其中一个true响应意味着至少有一个项被删除,否则为false:我有这个类:

HotelPriceSummary {
     Hotel hotel;
     float price
}

一个List<HotelPriceSummary> allHotels;

Iterable<Hotel> discardedHotels

我想做一些事情(显然,存在是一个不存在的函数,是表达我想做的但是我没有找到方法)

allHotels.removeIf(h -> h.getHotel().existsIn (discardedHotels))
答案

您无法在Iterable中有效地找到项目。我建议将它复制到临时集(除非它已经是一组),然后调用contains()

Set<Hotel> discardedSet = new HashSet<>();
discardedHotels.forEach(discardedSet::add);
allHotels.removeIf(h -> discardedSet.contains(h.getHotel()));

如果你不介意O(n * m)的复杂性,你可以在List.removeIf()中调用Iterable.forEach()

discardedHotels.forEach(h -> allHotels.removeIf(hps -> hps.getHotel().equals(h)))

以上是关于有条件地从Java 8中的List中删除元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java集合---List集合

如何有条件地从元组列表中删除元素?

如何正确地从有效载荷中添加和删除元素? (或有条件更换)

我如何有效地从 forward_list 中删除_if 只有一个元素?

Java 8,流查找重复元素

Python 中如何删除一个列表 List 中多个符合条件的元素