Список коллекций Java: преобразование из списка '> в список' - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть функция, которая возвращает такой список: -

List <Column <String1, String2>>

Далее я хочу передать этот список второй функции, но Для 2-й функции просто необходим список, который содержит только 1-ю часть (строку1) столбца (-ов) вышеприведенного списка.

Итак, я хочу передать этот список второй функции: -

List <String1>

мой вариант использования : обе функции взяты из библиотеки, которую я использую для доступа к базе данных (Cassandra) для веб-приложения. Первая функция дает мне список всех столбцов, который имеет две части: имя (String1) и значение (String2). Итак, первая функция дает мне список всех столбцов (каждый из которых имеет две строки), тогда мне просто нужно использовать список имен столбцов, чтобы передать его второй функции, которая будет запрашивать в БД эти столбцы.

Поскольку мне нужно выполнить эту работу как минимум 2-3 раза, прежде чем запрашивать данные из БД для одной страницы, мне нужен сверхбыстрый и достаточно эффективный метод для этого.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2011

Это зависит от того, что вы подразумеваете под «эффективным» (память, время выполнения, что-то еще?) И что делает эта вторая функция.

Если вам важна скорость, и вторая функция будетпросматривая элементы в списке несколько раз, вам, вероятно, следует просто скопировать строки в новый List<String>:

List<String> strings = new ArrayList<String>(input.size());
for (Column<String, String> column : input) {
    strings.add(column.name());
}
return strings;

Если, с другой стороны, вторая функция будет смотреть только нанебольшое подмножество элементов или, если вам важнее память, чем скорость, вам, вероятно, понадобится ленивое представление, которое преобразует элементы по мере их доступа.Lists.transform от Google Guava может сделать это для вас:

return Lists.transform(input, new Function<Column<String, String>, String>() {
    public String apply(Column<String, String> column) {
        return column.name();
    }
};

Обратите внимание, что вы можете создать функцию как отдельный статический класс, если вы не согласны с тем, чтобы он держался зассылка на ваш включающий экземпляр.Я использовал анонимный класс здесь для краткости / ясности.

0 голосов
/ 19 февраля 2011

В Scala вы можете просто сделать:

stringsList = columnsList.map(_.string2)
0 голосов
/ 19 февраля 2011

Я считаю, что нет более простого способа, чем просто пройтись по первому списку и спросить у каждого Column его String1, а затем добавить это значение к вашему List<String1>.

Если вы хотите отделитьходьба и добавление, затем подумайте о написании Iterator, который возвращает все String1 из первого списка, а затем используйте traverse this.

...