【问题标题】:Instantiate ArrayList with map from another ArrayList使用来自另一个 ArrayList 的映射实例化 ArrayList
【发布时间】:2019-06-20 05:15:27
【问题描述】:

我有一个 A 类型的当前 ArrayList,我想创建一个包含此列表中所有 B 类型对象的新列表,其中 B 是 A 的子类。有没有办法使用地图()?

ArrayList<B> allBs = allAs.stream().map( b -> where b instanceof B)

可能看起来像这样?

【问题讨论】:

    标签: java dictionary arraylist types instanceof


    【解决方案1】:

    您可以使用filter 函数来做到这一点:

    List<B> allBs = allAs.stream()
                         .filter(B.class::isInstance)  
                         .map(B.class::cast)
                         .collect(Collectors.toList());
    

    这将过滤掉任何与给定谓词不匹配的元素,将它们强制转换为B 对象,然后将其收集到新的List

    还要注意我把ArrayList&lt;B&gt; allBs改成了List&lt;B&gt; allBs,因为program to the interface是个好习惯

    【讨论】:

    • 我无法将 allBs 创建为 B 类型,它仅在我创建 A 类型的列表时才有效。我得到的错误是:必需的列表 B,但“收集”被推断为 R
    • @Hdot 抱歉已修复
    猜你喜欢
    • 2019-09-13
    • 2018-08-26
    • 2017-07-02
    • 2022-12-18
    • 1970-01-01
    • 2016-04-16
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多