Предположим, что вы хотите создать копию объекта ImmutableSet
/List
/Map
, но отфильтровать некоторые исходные записи. Одним из способов реализации этого является следующий:
ImmutableList.copyOf(Iterables.filter(myObject, myObject.EQUALS));
где myObject.EQUALS
является предикатом для операции Iterables.filter()
. Я думаю, что это довольно элегантная и легко читаемая реализация. Однако при этом создается два объекта списка (первый через вызов Iterables.filter(...)
, второй через ImmutableList.copyOf(...)
), что очень неэффективно.
Кто-нибудь знает более эффективный способ сделать это?
Наверное, лучше всего было бы добавить предикаты фильтрации в конструкторы ImmutableSet
/List
/Map
, чтобы объект конструировался только один раз. Но, к сожалению, такого параметра нет.