Zrzutowanie parametrow obiektu z listy do listy

0

Jak w Javie zrobic cos takiego w sprytny sposob:

mam liste obiektow. Powiedzmy:

List<auto> carList

class auto {
String driver;
int carAge;
int price;
int maxSpeed; 
}

mam funkcje operujaca na liscie Stringow:

foo (List<String> list){
//do smth
}

Czy da sie jakos wywolac foo dajac jako argument carList, tak zeby uzyc tylko pola driver? Wiem ze mozna przepisac, pokombinowac z naglowkiem metody etc. ale ciekawi mnie czy jest jakies ladne sprytne rozwiazenie.

3

pomijając kontekst to do takich rzeczy transformuj albo używając zwykłej pętli for, guavy albo lambdy.
carList.stream().map(car -> car.getDriver()).collect(Collectors.toList())

1

Rozszerzając odpowiedź od @karolinaaa:

  1. Jeśli da się zredukować sprawę do operacji jednostkowych (czyli zamiast Collection<SomeType> foo(List<String> list) może być SomeType foo(String val)) to najlepiej wykorzystać streamy, czyli:
List<Auto> list = getList();
FooType fooType = new FooType();
list.map(auto -> auto.toString()).map(autoString -> fooType.foo(autoString)).collect(Collectors.toList());
  1. Jeśli nie da się tego zrobić, a potrzebujesz z jakichś powodów jednolinijkowca, to można:
Stream.of(list).map(autoCollection -> autoCollection.stream().map(auto -> auto.toString()).collect(Collectors.toList()).forEach(list -> fooType.foo(list));

Vivat lambdy i streamy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1