【发布时间】:2018-08-08 00:54:44
【问题描述】:
据我所知,Java 8 引入了一种可用于 Collection 类型的新方法:removeif()。它接受一个谓词,该谓词定义应删除元素的条件。它返回一个布尔值,其中真正的响应意味着至少一个项目已被删除,否则为 false: 我有这门课:
HotelPriceSummary {
Hotel hotel;
float price
}
List<HotelPriceSummary> allHotels;
和Iterable<Hotel> discardedHotels
我想做类似的事情(显然existsIn是一个不存在的函数,是表达我想做的但是我没有找到方法)
allHotels.removeIf(h -> h.getHotel().existsIn (discardedHotels))
【问题讨论】:
-
您可以从
discardedHotelsIterable 生成HashSet(假设Hotel覆盖equals 和hashCode)并使用set.contains() -
你能用
Collection代替Iterable吗?它会让这变得简单得多。 -
使用
ArrayList.removeAll(Collection<?> c) -
discardedHotels.forEach(h -> allHotels.removeIf(hps -> hps.getHotel().equals(h)))怎么样?效率不高,我知道。 -
@Harshit 没有
ArrayList,没有Collection,它们甚至不是同一个元素类型。
标签: java lambda collections java-8