2013-12-07 6 views
2

У меня есть ArrayList класса PersonПолучение ArrayList переменной из ArrayList класса

ArrayList<Person> people = new ArrayList<Person>(); 

Внутри этого класса Person у меня есть некоторые переменные, связанные с этим человеком.

public class Person { 
    String Name; 
    String Address; 
    String Phonenumber; 
} 

Теперь есть способ использовать людей, владеющих архаистами, чтобы получить имя владельца?

+0

Зачем вам нужен отдельный список массивов? Что не так с '(people.get (index)). GetName()'? – nhgrif

+0

Epickel, мой ответ может обеспечить удобный способ хранения двух массивов в синхронизации, если у вас должны быть оба массива. – nhgrif

ответ

3

Вам необходимо перебрать его.

List<String> names = new ArrayList<>(); 

for(Person person : people) { 
    names.add(person.getName()); // Assuming you have a getter 
} 
+0

, но будут ли имена арраистов обновлены, если я добавлю нового человека в народный архаист? –

+0

Нет, определенно нет. Вам придется расширять 'ArrayList' и предоставлять события или просто вызывать их вручную при изменении списка' people'. –

+0

@Epickel: это неверно, 'Name' не является общедоступным. Он не имеет модификатора. Чтобы быть в безопасности, я прокомментировал, что, как вы можете видеть, я принимаю геттер. –

0

Теперь есть способ использования людей Список_массивов получить ArrayList из Имени?

Да. Определите имя arraylist как ArrayList<String>. Затем, перейдите по ArraList<Person> и поместите значение в имя arraylist.

List<String> nameList = new ArrayList<>(); 

for(Person person : people) { 
    nameList.add(person.getName()); 
} 
0

Если вы действительно хотите сохранить пару ArrayLists, один содержащий Person объектов, а другие, содержащий Name свойства объектов человека, вы всегда можете создать еще один класс:

public class PersonList { 
    private ArrayList<Person> people; 
    private ArrayList<String> names; 

    public PersonList() { 
     people = new ArrayList<>(); 
     names = new ArrayList<>(); 
    } 

    public PersonList(ArrayList<Person> p) { 
     people = p; 
     names = new ArrayList<>(); 
     for(Person person : p) { 
      names.add(p.getName()); 
     } 
    } 

    public ArrayList<Person> getPeople() { 
     return people; 
    } 

    public ArrayList<String> getNames() { 
     return names; 
    } 

    public void add(Person p) { 
     people.add(p); 
     names.add(p.getName()); 
    } 

    public Person getPerson(int index) { 
     return people.get(index); 
    } 

    public String getName(int index) { 
     return names.get(index); 
    } 

    // more methods to continue to replicate the properties of ArrayList... 
    // just depends what you need 
} 

Вы придется продолжать добавлять методы в этот класс, чтобы этот класс мог делать все, что вы можете сделать на одном ArrayList. И действительно, этот класс - это просто удобный способ упростить работу с двумя разными ArrayLists одновременно.

Во всяком случае, теперь в главном коде, вы можете создать экземпляр объекта PersonList вместо списка массива:

PersonList people = new PersonList(); 

И добавить к people. Или вы могли бы даже просто использовать обычный список массива вверх, пока не понадобится список имен, и экземпляр PersonList с другим конструктором я предоставил:

// Assuming ArrayList<People> arrPeople exists... 
PersonList people = new PersonList(arrPeople); 

А теперь people объекта будет содержать ArrayList идентичны arrPeople, а а также соответствующий список names, содержащий все имена. И независимо от того, как вы создаете экземпляр PersonList, вызывая метод add на PersonList (тот же синтаксис, что и ArrayList, если вы правильно настроили этот класс), и он сохранит оба списка массивов, которые управляет класс в синхронизации.

Смежные вопросы