【问题标题】:Convert Set of Parent to List of Child using Java 8 streams使用 Java 8 流将父集合转换为子列表
【发布时间】:2020-12-03 16:05:45
【问题描述】:

所以我正在尝试使用 Java 8 流将 Set of Parent 转换为 List of Child。

这里是父类:

public class Parent<T extends GenericModel> {
    private String href;
    private String rel;
    private String title;
    private ResourceStatus status;
    private Parent source;
}

这里是子类:

public class Child extends Parent<SomeClass> {
    private String category;
    private String type;
}

现在我已经有了Set&lt;Parent&lt;SomeClass&gt;&gt;,我想将其转换为List&lt;Child&gt;。我不想走原始的方式,而是使用 Java 8 流来实现这一点。

感谢任何帮助。

【问题讨论】:

  • Set&lt;Parent&gt; 中的元素是否保证都是Child 实例?
  • @Holger : 是的Set&lt;Parent&gt; 保证是所有Child 实例
  • 您能在 child 中显示您需要哪些字段吗?你在父母身上有什么?
  • 你能用代码更新帖子吗?用示例输入和预期输出@Kusum
  • 那么,这些字段就完全不相关了。您可以使用 Stream 变体得到答案,但只需考虑像 List&lt;Child&gt; listOfChild = Arrays.asList(setOfParent.toArray(new Child[0])); 这样的简单检查复制操作的“原始方式”它仅在所有元素的类型为 Child 时才有效,但是,它是最简单和最有效的变体......

标签: java-8 java-stream


【解决方案1】:

您可以只进行流式传输和投射。如果您确定它们是正确的类型,那么您可以删除过滤器,但可能会出现类转换异常。

通常情况下,例外情况比默默地忽略假设中的问题要好,但我会让你决定哪种情况更适合你的情况。

final List<Child> children = parents.stream()
    .filter(Child.class::isInstance)  //optional 
    .map(Child.class::cast)
    .collect(Collectors.toList());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多