gpt4 book ai didi

java - 使用扩展类遍历 Arraylist

转载 作者:搜寻专家 更新时间:2023-10-31 20:15:10 25 4
gpt4 key购买 nike

我一直想知道 Java 中的一个函数,我希望它存在。我想遍历一个 Arraylist(比如 A 类),它包含 B 类和 C 类的对象,它们都扩展了 A。这个想法,我只想遍历(例如)ArrayList 中 B 类的对象。

这怎么可能,就像下面代码中的简短示例,而没有长示例?

主类:

     import java.util.*;

public class Test {

public static void main(String[] args) {
new Test ();
}

Test() {
ArrayList<A> a = new ArrayList<A> ();
a.add (new B ());
a.add (new C ());
a.add (new C ());
a.add (new B ());
a.add (new C ());
for (A aObject : a) { // this works, I want it shorter
if (aObject instanceof B) {
B b = (B) aObject;
System.out.println (b.hi);
}
}
for (B b : a) // like this?
System.out.println (b.hi);
}
}

答:

public class A {

}

乙:

public class B extends A {
String hi = "hi";
}

C:

public class C extends A {

}

编辑:因为很多人回答这个问题:我知道 instanceof 的用法。我想要一种更快的方法来遍历数组中的所有对象,其中类是 B。

最佳答案

您可以为它创建一个可重用的 Filter 类,类似于 FileFilter。 (请参阅 korifey 关于使用 Guava 的回答。)除此之外,不,没有任何现有功能可以做到这一点。此外,任何现有功能都必须准确地执行您正在执行的操作,因为 List 类型没有任何方法知道不同类别的对象在列表中的位置。 (它还必须遍历它们才能找到它们。)

如果您需要一个高性能的解决方案来解决这个问题,您可以考虑为您的单独实例存储单独的列表 - 替换或补充您当前的列表。您甚至可以将其包装在一个复合类中,该类将通过一个通用 API 提供两种功能(所有实例和类实例)。

关于java - 使用扩展类遍历 Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431112/

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