Вам понадобится индивидуальное решение для этого. Создайте пользовательскую коллекцию так, чтобы она реализовала интерфейс List, и добавьте все элементы из исходного списка в этот список.
Внутри этого пользовательского класса List вам необходимо поддерживать несколько коллекций Map всех атрибутов, которые могут помочь вам при поиске значений по мере необходимости. Чтобы заполнить эту Карту, вам нужно будет использовать самоанализ, чтобы найти список всех полей и их значений.
Этот пользовательский объект должен будет реализовать некоторые методы как List findAllBy(String propertyName, String propertyValue);
, которые будут использовать вышеуказанную хеш-карту для поиска этих значений.
Это не простое прямое решение. Более того, вам нужно учитывать вложенные атрибуты, такие как «user.address.city». Сделать этот пользовательский список неизменным очень поможет.
Однако даже если вы перебираете список из 1000 объектов в List, все равно это будет быстрее, поэтому вам лучше перебирать List для того, что вам нужно.