据我所知,Java 8 引入了一个可用于 Collection 类型的新方法:removeif()。它接受一个谓词,该谓词定义了应删除元素的条件。它返回一个 boolean 值,其中 true 响应意味着至少有一项已被删除,否则为 false: 我有这门课:
HotelPriceSummary {
Hotel hotel;
float price
}
一个List<HotelPriceSummary> allHotels;
和Iterable<Hotel> discardedHotels
我想做一些类似的事情(显然existsIn是一个不存在的函数,是表达我想做的事情但我没有找到方法)
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) 复杂度,可以在 Iterable.forEach()
中调用 List.removeIf()
:
discardedHotels.forEach(h -> allHotels.removeIf(hps -> hps.getHotel().equals(h)))
关于java - 有条件地从 Java 8 中的列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024564/