Это зависит от того, что вы подразумеваете под «эффективным» (память, время выполнения, что-то еще?) И что делает эта вторая функция.
Если вам важна скорость, и вторая функция будетпросматривая элементы в списке несколько раз, вам, вероятно, следует просто скопировать строки в новый 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();
}
};
Обратите внимание, что вы можете создать функцию как отдельный статический класс, если вы не согласны с тем, чтобы он держался зассылка на ваш включающий экземпляр.Я использовал анонимный класс здесь для краткости / ясности.