gpt4 book ai didi

java - 仅遍历数组的某些成员

转载 作者:行者123 更新时间:2023-11-29 03:00:33 24 4
gpt4 key购买 nike

(全面披露:来自一个离开 Java 一段时间的 Ruby 家伙)

Entity[] space;

class Planet extends Entity ...

class Star extends Entity ...

space[] 数组包含空值、行星和恒星的混合。我只想访问该数组中的星星(可能没有。)

不使用 instanceof 的优雅 Java 方法是什么?

最佳答案

在 Java 中,您通常会尽量避免使用数组(因为使用它们很麻烦)。

因此,第一步是从 Collection API 中获取一些内容来表示您的数组。 List想到了!

List<Entity> entities = Arrays.asList(space);

现在,Java 8 引入了 Stream API。

entities.stream()
.filter(e -> e != null)
.filter(e -> e instanceof Star)
.foreach(e -> doSomethingWithStar((Star) e));

如果你想避免使用 instanceof你需要提供你的 Entity class 一种区分恒星和其他物体的方法。 boolean isStar()方法可能会实现这一点:

entities.stream()
.filter(e -> e != null)
.filter(e -> e.isStar())
.foreach(e -> doSomethingWithStar((Star) e));

但是,仍然存在同样的问题:Stream 的类型还是Stream<Entity>即使你现在知道只有 Star在他们里面。

转换 Entity 的其他方法进入Star或者没有什么可以添加 void addStarToList(List<Star> stars)如果实体是星形则将其添加到列表中但如果不是星形则不添加任何内容的方法。

List<Star> stars = new ArrayList<>();
entities.stream()
.filter(e -> e != null)
.foreach(e -> e.addStarToList(stars));

关于java - 仅遍历数组的某些成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35260082/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com