#lambda #java-8
#лямбда #java-8
Вопрос:
У меня есть коллекция, которую я отсортировал по полю, содержащему время.
collectsPublishEntityActual
.stream()
.sorted(Comparator.comparing(PublishListEntity::getInstant)
.reversed())
.filter(publishListEntity -> publishListEntity.getUrlsBundles()
.entrySet()
.stream()
.filter(k -> k.getKey().equals()) ?????????
)
....
public class PublishListEntity implements Serializable {
private Map<PackId, String> urlsPack;
private Instant instant;
class PackId implements Serializable {
private String field1;
private String field2;
}
У меня также есть коллекция ключей, ключ — это объект, состоящий из 2 строковых полей («F», «1»).
Set<PackId> packIds ;
Мне нужно найти объект, в котором карта содержит ключи, предоставленные в Set packIds.
Мне сложно выполнить фильтрацию, мне нужно получить только один из коллекции объектов, самый первый, который будет содержать карту в поле, которая содержит хотя бы один ключ из набора идентификаторов пакетов, предоставленных в качестве ключей.
Комментарии:
1.Я предлагаю использовать
sorted
afterfilter
.2. Почему? Я имею в виду . Что это даст?
Ответ №1:
Вы можете фильтровать по любому ключу из набора, существующего на карте, используя anyMatch
и получить первый по findFirst
collectsPublishEntityActual
.stream()
.sorted(Comparator.comparing(PublishListEntity::getInstant)
.reversed())
.filter(publishListEntity -> packIds
.stream()
.anyMatch(k -> publishListEntity.getUrlsBundles().containsKey(k)))
.findFirst();
.