представление subList, основанное на значении элементов - PullRequest
1 голос
/ 26 января 2012

Я знаю, что инфраструктура Collection позволяет создавать «представления», то есть легкие «обертки» для объекта Collection.
Что меня особенно интересует, так это, учитывая List, возвращать представление только для подмножества элементов, соответствующих некоторым условиям.
По сути, я хочу эмулировать функциональность метода subList (), только не на основе начального и конечного индексов, а на некоторых параметрах элементов.

Первый подход, о котором я подумал, - это просто создать другой список, пройти первый список и проверить каждый элемент ...
Хотя на самом деле это не будет копировать какой-либо MyObject, а только их ссылки, я в любом случае создам новый объект List с его накладными расходами. Разве это не правильно?
Есть ли какой-нибудь легкий способ делать то, что мне нужно?

N.B. Мой оригинальный Список - действительно большая коллекция ...

Спасибо всем

Ответы [ 2 ]

4 голосов
/ 26 января 2012

Вы можете легко сделать это в Java, используя коллекции Guava (Collections2 имеет метод filter http://docs.guava -libraries.googlecode.com / git-history / v11.0.1 / javadoc / index.html).

Вы также можете сделать это в groovy, используя метод findAll, например

myList.findAll { it.contains("aValue") }

. Любой из этих методов создаст новую коллекцию под капотом.Таким образом, они просто выполняют за вас итерации элементов и проверяют их.Затраты на создание нового списка минимальны (это просто создание экземпляра одного нового объекта).

2 голосов
/ 26 января 2012
I would anyways create a new List object, with its overhead

Я не понимаю, что вас беспокоит здесь. Глядя на источник класса ArrayList даже subList(int fromIndex, int toIndex) метод в классе List создает новый внутренний класс (который выходит из List). По сути, это то, что вы будете делать в вашем методе, то есть создайте новый экземпляр List и скопируйте в него ссылку на соответствующий элемент. Этот пользовательский метод будет более или менее иметь ту же производительность, что и метод subList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...