gpt4 book ai didi

java - 有条件地从 Java 8 中的列表中删除元素

转载 作者:行者123 更新时间:2023-12-01 16:46:47 26 4
gpt4 key购买 nike

据我所知,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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com