異なるオブジェクトのリストから連結3つのストリームながらリスト<string>を取得します

ゲオルギMichev:

私はクラスを持っています

class Person {  
    public List<BaseballPlayer> baseballPlayers;    
    public List<MmaFighter> mmaFighters;    
    public List<RugbyPlayer> rugbyPlayers;  
}

すべてのオブジェクトのプレーヤーで彼のidの文字列プロパティがあります。私は、私は、リスト内のすべてのIDを収集しようとしています

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);

今私は)(物事を単純化し、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)); 

しかし、私は理解できない私は3つのストリームから出てくる新しいストリームのタイプにジェネリックを使用する必要がありますか?また、代わりにオブジェクトのストリームdiamandで使用するすべての3つのクラスの親クラスを作成しようとしました。このpersonStreamは疑問です。

Skl029:

これを試して。

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());

若しくは

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());

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=222864&siteId=1