Как получить значение ArrayList из объекта ArrayList в Java? - PullRequest
1 голос
/ 12 марта 2019

У меня есть ArrayList из Object с.Я добавил несколько объектов и ArrayList из String s к этому ArrayList.Я могу легко получить ценность объектов из этого.Теперь мой вопрос: как я могу получить от него все ArrayList из String с?

Фрагмент кода:

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

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

Теперь пришло время добавить Person в itemsList

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

Теперь мой вопрос: как я могу получить strList от itemsList?

1 Ответ

3 голосов
/ 12 марта 2019

Используйте instanceof для этого, с помощью instanceof найдите тип Object в List<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);

                  }
          }
    }

Но, согласно обсуждению в комментариях, предположим, что если у вас есть List<String> и List<Integers> в List<Object> itemsList, тогда во время приведения типа будет сгенерировано исключение, потому что во время выполнения List<String> и List<Integers> оба обрабатываются как `List

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

взгляните на Тип Erasure , поэтому используйте универсальные списки для каждого типа вместо `List для добавления разных типов

...