Почему я не могу установить Transformer в LazyList в Apache Commons? - PullRequest
0 голосов
/ 11 января 2011

В apache.commons.collections есть класс MapUtils , который имеет два этих метода для определения карты, которая может создавать объекты по запросу для карты:

Таким образом, я могу использовать фабрику для создания объекта

Factory factory = new Factory() {
    public Object create() {
        return new Object();
    }
}

или преобразователь для создания нового объекта в зависимости от ключа карты

Transformer factory = new Transformer() {
    public Object transform(Object mapKey) {
        return new Object(mapKey);
    }
}

Существует аналогичный класс для списков: ListUtils , но только этот классесть метод с фабрикой:

Я хотел бы преобразовать объект, как вситуация на карте, но с использованием индекса объекта в списке вместо ключа на карте.

Transformer factory = new Transformer() {
    public Object transform(int index) {
        return new Object(index);
    }
}

Мой вопрос: почему не существует lazyList (Список списка, Transformer преобразователь)?Предоставляет ли Apache какой-либо другой список для этого или мне нужно создавать свою собственную реализацию?

Спасибо.

1 Ответ

1 голос
/ 11 января 2011

Прежде всего, по моему мнению, вы должны использовать Гуава для такого рода вещей ... он полностью использует дженерики и предоставляет гораздо более продуманный, компактный и разумный API. Он также предоставляет метод Lists.transform , который преобразует базовый List на основе элементов в каждой позиции в списке.

Тем не менее, я не думаю, что метод преобразования для преобразования List на index имеет большой смысл. Фактический базовый List был бы совершенно бессмысленным, учитывая, что преобразование игнорировало бы элементы, которые оно содержит ... только его размер имел бы значение. Не могли бы вы объяснить, почему вы хотели бы сделать что-то подобное?

...