Georgi Michev:
Tengo una clase
class Person {
public List<BaseballPlayer> baseballPlayers;
public List<MmaFighter> mmaFighters;
public List<RugbyPlayer> rugbyPlayers;
}
En cada jugador objeto no es la cadena de propiedades para su identificación. Estoy tratando de recopilar todos los identificadores en la lista de lo que yo hago
List<String> baseballPlayersIds = person.baseballPlayers.stream()
.map(s -> s.getId()).collect(Collectors.toList());
List<String> mmaFightersIds = person.mmaFighters.stream()
.map(s -> s.getId()).collect(Collectors.toList());
List<String> rugbyPlayersIds = person.rugbyPlayers.stream()
.map(s -> s.getId()).collect(Collectors.toList());
baseballPlayersIds.addAll(mmaFightersIds);
baseballPlayersIds.addAll(rugbyPlayersIds);
Ahora estoy tratando de simplificar las cosas y mejorar mediante el uso de la lógica Stream.concat ()
Stream<List<BaseballPlayer>> baseballPlayersIdsStream = Stream.of(person.baseballPlayers);
Stream<List<MmaFighter>> mmaFightersIdsStream = Stream.of(person.mmaFighters);
Stream<List<RugbyPlayer>> rugbyPlayersIdsStream = Stream.of(person.rugbyPlayers);
Stream<List<? extends Object>> personStream = Stream.concat(baseballPlayersIdsStream, Stream.concat(mmaFightersIdsStream, rugbyPlayersIdsStream));
pero no puedo cifra debería utilizar genéricos para el tipo de nueva corriente que sale de las 3 corrientes? También tratado de crear la clase padre para las 3 clases para usar en la corriente diamand en lugar de objetos. Este personStream está en duda.
Skl029:
Prueba esto.
List<String> allIds = Stream.of(
person.baseballPlayers.stream().map(p -> p.getId()),
person.mmaFighters.stream().map(p -> p.getId()),
person.rugbyPlayers.stream().map(p -> p.getId()))
.flatMap(s -> s)
.collect(Collectors.toList());
O
List<String> allIds = Stream.of(
person.baseballPlayers.stream().map(BaseballPlayer::getId),
person.mmaFighters.stream().map(MmaFighter::getId),
person.rugbyPlayers.stream().map(RugbyPlayer::getId))
.flatMap(Function.identity())
.collect(Collectors.toList());