車のリストがあるとします。
public class Car {
private String brand;
private String name;
private String color;
public Car() { // ... }
public getName() { return name; }
// ...
}
// Suppose that I have already init the list of car
List<Car> cars = //...
List<String> names = new ArrayList<String>();
for (Car c : cars ) {
names.add(c.getName());
}
上記のコードを短くするにはどうすればよいですか?簡単に言えば、リストの各要素でメソッドを呼び出すにはどうすればよいですか?
たとえば、Pythonでは次のようになります。
[car.name for car in cars]
更新:
ラムダ式を使用したJava 8ソリューションについては、aaiezzaの回答を参照してください。
元の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");
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加