java - 从不同对象的列表中连接 3 个流时获取 List<String>

标签 java spring collections java-stream

我有课

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

在每个对象玩家中,都有一个用于其 id 的 String 属性。我正在尝试收集我所做的列表中的所有 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 个流的新流类型?还尝试为所有 3 个类创建父类以在流钻石中使用而不是 Object。此 personStream 有疑问。

最佳答案

试试这个。

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

关于java - 从不同对象的列表中连接 3 个流时获取 List<String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55909788/

相关文章:

java - maven intellij java mapreduce 测试程序

java - 在迭代中向 ArrayList 添加对象

java - 是否有任何 java 集合包装器/集合在多线程访问时失败?

java - jpa/hibernate 如何通过带注释的外键映射元素集合

java - 未从资源包获取消息

java - 当文件中存在重复的键值对时,如何读取属性文件?

java - 如何在 Android 中读取 .txt 文件?

java - 如何点击 javascript :void(0) button in SeleniumWebdriver Java?

java - 如何在 Java 中使类可变

java - 使用自定义编码器的 REST+Spring+POST