【问题标题】:How to get ArrayList value from a Object ArrayList in java?如何从 java 中的对象 ArrayList 中获取 ArrayList 值?
【发布时间】:2019-03-12 13:11:35
【问题描述】:

我有一个 ArrayListObjects。我在这个ArrayList 中添加了一些对象和Strings 的ArrayList。我可以轻松地从中获取对象值。现在我的问题是如何从中获取整个ArrayListStrings?

代码 sn-p:

Person.java

public class Person {

    private String name;
    private int number;

    public Learn(String name, int number) {
        this.name = name;
        this.number= number;
    }

    public String getName() {
        return name;
    }

    public int getNumber() {
        return number;
    }
}

现在我已经定义了对象列表

List<Object> itemsList = new ArrayList<>();

现在是时候在 itemsList 中添加一些 Person

public void addPerson(){
    itemsList.add(new Person("Alex", 0000062846));
    itemsList.add(new Person("Jack", 0000131332));
    itemsList.add(new Person("Anjela", 0000053715));
    itemsList.add(new Person("Brian", 0000085015));
}

现在,我将在 2 的索引处添加一个 字符串列表

public void addList(){
    List<String> strList = new ArrayList<>();
    strList.add("Hello");
    strList.add("How");
    strList.add("are");
    strList.add("you?");

    itemsList.add(2, strList);
}

好的,是时候从itemsList获取值了

Person person = (Person) itemsList.get(0);
System.out.println(person.getName);  // Alex

现在我的问题是:如何从itemsList 获得strList

【问题讨论】:

  • 你为什么要做这样的数组列表?
  • 我在android中有一个异构的recyclerView。我想将整个arrayList传递给这个rec​​yclerView,它可以用来将viewPager显示为一个项目
  • List&lt;String&gt; strList = (List&lt;String&gt;) items.getList(...) 但实际上,为什么?
  • 当您创建这样不同的列表时,在检索时您必须编写if 条件来检查index 的项目实例。虽然这不是好的设计。 instanceof 也是一项昂贵的操作。
  • 这种方法真是一团糟。为什么不创建一个包含您的类的接口类型的 ArrayList。然后让每个类实现该接口。向接口添加一个返回标识符的函数

标签: java android object arraylist arrayobject


【解决方案1】:

为此使用instanceof,通过使用instanceofList&lt;Object&gt;中找到Object类型

for(Object obj : itemsList) {

    if(obj instanceof List) {    //if it is List type then type cast it

          List<String> str = (List<String>) obj;
          for(String s : str) {

             System.out.println(s);

                  }
          }
    }

但是根据 cmets 中的讨论,假设如果 List&lt;Object&gt; itemsList 中有 List&lt;String&gt;List&lt;Integers&gt;,那么在类型转换时会抛出异常,因为在运行时 List&lt;String&gt;List&lt;Integers&gt; 两者被视为`List

List<String> str = (List<String>) obj;    //exception thrown at this line

看看Type Erasure ,所以对每种类型使用通用列表而不是`List来添加不同的类型

【讨论】:

  • 如果我决定将另一个List&lt;Integer&gt; 添加到items 以供以后使用会发生什么,只是想更进一步,对我来说,整个设计方法看起来很容易出错。
  • 会抛出异常,避免jdk人引入泛型概念@Glains
  • 我想说的是,虽然这确实解决了问题,但如果将其他属性添加到列表中,将来很容易出错。可以将此注释添加到答案中。
  • @Glains 这个问题一开始就容易出错。 那个应该添加到答案中。
  • @FedericoklezCulloca 确实如此,但你仍然可以给出一个好的答案,即使是一个糟糕的问题。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-02
相关资源
最近更新 更多