Java 获取列表<;字符串>;而concat 3则从不同对象列表中提取数据流

Java 获取列表<;字符串>;而concat 3则从不同对象列表中提取数据流,java,spring,collections,java-stream,Java,Spring,Collections,Java Stream,我有一节课 class Person { public List<BaseballPlayer> baseballPlayers; public List<MmaFighter> mmaFighters; public List<RugbyPlayer> rugbyPlayers; } class-Person{ 公开棒球运动员名单; 公开名单; 公开名单橄榄球运动员; } 在每个对象播放器中,他的id都有一

我有一节课

class Person {  
    public List<BaseballPlayer> baseballPlayers;    
    public List<MmaFighter> mmaFighters;    
    public List<RugbyPlayer> rugbyPlayers;  
}
class-Person{
公开棒球运动员名单;
公开名单;
公开名单橄榄球运动员;
}
在每个对象播放器中,他的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);
List baseballPlayersIds=person.baseballPlayers.stream()
.map(s->s.getId()).collect(Collectors.toList());
List mmaFightersIds=person.mmaFighters.stream()
.map(s->s.getId()).collect(Collectors.toList());
List rugbyPlayersIds=person.rugbyPlayers.stream()
.map(s->s.getId()).collect(Collectors.toList());
baseballPlayersIds.addAll(mmaFightersIds);
棒球队;橄榄球队;
现在我正试图通过使用Stream.concat()简化事情并改进逻辑

Stream Baseballplayersidstream=Stream.of(个人baseballPlayers);
Stream MmaFightersDisstream=流的(person.mmaFighters);
流橄榄球运动员流=流(个人橄榄球运动员);

流如果在所有类中实现公共接口:

interface Team {
    String getId();
}
您可以使用以下代码:

List<BaseballPlayer> baseballPlayers = ...;
List<MmaFighter> mmaFighters = ...;
List<RugbyPlayer> rugbyPlayers = ...;

List<String> identfiers = Stream.of(baseballPlayers, mmaFighters, rugbyPlayers)
        .flatMap(Collection::stream)
        .map(Team::getId)
        .collect(Collectors.toList());
列出棒球运动员=。。。;
列表=。。。;
列出橄榄球运动员=。。。;
列表标识符=流(棒球运动员、拳击手、橄榄球运动员)
.flatMap(集合::流)
.map(团队::getId)
.collect(Collectors.toList());
试试这个

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 allid=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 allid=Stream.of(
person.BaseballPlayer.stream().map(BaseballPlayer::getId),
person.MmaFighter.stream().map(MmaFighter::getId),
person.rugbyPlayers.stream().map(RugbyPlayer::getId))
.flatMap(函数.identity())
.collect(Collectors.toList());

Do
BaseballPlayer
MmaFighter
RugbyPlayer
都实现了一个公共接口,该接口定义了一个抽象的
getId()
方法?@JacobG。他们不允许修改这些类,以便实现公共接口?如果这是一个解决方案,并且没有其他方法可以修改类,但是如果有其他方法我会尝试,就像问题本身下的第一个问题一样,OP说-这不是一个选项看看他们最后的评论:“但是如果有其他方法我会尝试”。事实上,你也可以使用
Function.identity()
而不是
s->s
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());