Conditionally remove elements from a List in Java 8
本问题已经有最佳答案,请猛点这里访问。
据我所知,Java 8引入了一种可用于收集类型的新方法:ReaveIfE()。它接受一个谓词,该谓词定义了删除元素的条件。它返回一个布尔值,其中"真"响应表示至少删除了一个项,否则返回"假"。我有这门课:
1 2 3 4 | HotelPriceSummary { Hotel hotel; float price } |
和
我想做一些类似的事情(显然existsin是一个不存在的函数,是表达我想做的事情,但我没有找到方法)
1 | allHotels.removeIf(h -> h.getHotel().existsIn (discardedHotels)) |
在
1 2 3 | Set<Hotel> discardedSet = new HashSet<>(); discardedHotels.forEach(discardedSet::add); allHotels.removeIf(h -> discardedSet.contains(h.getHotel())); |
如果您不介意O(N*M)复杂性,可以在
1 | discardedHotels.forEach(h -> allHotels.removeIf(hps -> hps.getHotel().equals(h))) |