UPDATE:
См. Ответ aaiezza для решения Java 8 с использованием лямбда-выражения.
Оригинальный ответ до Java 8:
Эффект может быть достигнут с помощью Guava, реализация Function
уже более многословна, чем у вас:
List<Car> cars = //...
Function<Car, String> carsToNames = new Function<Car, String>() {
@Override
public String apply(Car car) {
return car.getName();
}
}
List<String> names = Lists.transform(cars, carsToNames);
(Имейте в виду, что Lists.transform
возвращает представление, которое будет применять функцию лениво - если вы хотите немедленное копирование, вам необходимо скопировать возвращенный список в новый список.)
Так что это не поможет вам сократить ваш код, но это пример того, насколько многословно это для достижения желаемого эффекта в Java.
Редактировать: Вы можете взглянуть на lambdaj , библиотеку, которая, кажется, подходит к тому, что вы ищете. Я сам не пробовал, но на домашней странице показан пример:
List<Person> personInFamily = asList(new Person("Domenico"), new Person("Mario"), new Person("Irma"));
forEach(personInFamily).setLastName("Fusco");