Фильтрация объекта, содержащего карту в поле, и поиск ключей на карте, которые соответствуют хотя бы одному ключу из предоставленной коллекции

#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 after filter .

2. Почему? Я имею в виду . Что это даст?

Ответ №1:

Вы можете фильтровать по любому ключу из набора, существующего на карте, используя anyMatch и получить первый по findFirst

 collectsPublishEntityActual
                .stream()
                .sorted(Comparator.comparing(PublishListEntity::getInstant)
                        .reversed())
                .filter(publishListEntity -> packIds
                        .stream()
                        .anyMatch(k -> publishListEntity.getUrlsBundles().containsKey(k)))
                .findFirst();
            .