Коллекции Google (библиотеки Guava): ImmutableSet/List/Map и фильтрация

Предположим, что вы хотите создать копию объекта ImmutableSet/List/Map, но отфильтровать некоторые исходные записи. Одним из способов реализации этого является следующий:

ImmutableList.copyOf(Iterables.filter(myObject, myObject.EQUALS));

где myObject.EQUALS является предикатом для операции Iterables.filter(). Я думаю, что это довольно элегантная и легко читаемая реализация. Однако при этом создается два объекта списка (первый через вызов Iterables.filter(...), второй через ImmutableList.copyOf(...)), что очень неэффективно.

Кто-нибудь знает более эффективный способ сделать это?

Наверное, лучше всего было бы добавить предикаты фильтрации в конструкторы ImmutableSet/List/Map, чтобы объект конструировался только один раз. Но, к сожалению, такого параметра нет.

6
задан Thomas Jung 30 May 2011 в 14:10
поделиться