【问题标题】:How to convert list without generics to list with generics using streams in java?java - 如何使用java中的流将没有泛型的列表转换为具有泛型的列表?
【发布时间】:2017-12-19 13:31:41
【问题描述】:

我想将不带泛型的 List 转换为 List<MyConcreteType>

我还需要只过滤掉我的具体类型。

我目前的流逻辑是这样的:

List list = new ArrayList();
Object collect1 = list.stream().filter((o -> o instanceof MyConcreteType)).collect(Collectors.toList());

但结果是我得到了Object 而不是List。有没有办法将此Stream 转换为List<MyConcreteType>

【问题讨论】:

  • 投吧List<MyConcreteType> typedList = (List<MyConcreteType>) list
  • @BoristheSpider 但我需要先过滤它 - 因为它也可以包含其他项目
  • list.stream().filter(MyConcreteType.class::isInstance).map(MyConcreteType.class::cast).collect(Collectors.toList()) 然后

标签: java generics java-8 java-stream


【解决方案1】:

使用参数化类型而不是原始类型,并使用map 将通过过滤器的对象强制转换为MyConcreteType

List<?> list = new ArrayList();
List<MyConcreteType> collect1 = 
    list.stream()
        .filter((o -> o instanceof MyConcreteType))
        .map(s-> (MyConcreteType) s)
        .collect(Collectors.toList());

或(类似于鲍里斯在评论中建议的):

 List<?> list = new ArrayList();
 List<MyConcreteType> collect1 = 
     list.stream()
         .filter(MyConcreteType.class::isInstance)
         .map(MyConcreteType.class::cast)
         .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多