如何从对象的ArrayList中的String实例变量中获取String数组?

时间:2016-06-18 19:22:20

标签: java android arrays arraylist collections

我有以下课程Employee

Class Employee {
    private String firstname;
    private String lastname;
    private int Salary;
    /* getters and setters */
}

我为这个类构建了一个ArrayList并为其添加了一些Employee,如下所示:

ArrayList<Employee> employees = new ArrayList<Employee>();
for (int x=1; x<=10; x++){
    Employee Newemp = new Employee();
    Newemp.setFirstname("firstname"+ i);
    Newemp.setLastname( "lastname"+ i);
    Newemp.setSalary( i * 1000);
    employees.add(Newemp); 
}

如何动态地从Employee String获取所有Employee的第一个名称作为ArrayList数组?
我要问的是:

String employeesFirstname = employees.firstname;

我可以将其作为String数组吗?还是我必须手动构建它?

这不是关于如何访问ArryList中的值,这是关于如何获取特定属性的所有值,如ArrayList中的firstname,作为字符串数组在android中使用java 7

3 个答案:

答案 0 :(得分:4)

首先,您的代码不会在列表中添加任何Employee 。首先实例化列表,然后创建一些Employee的实例,但由于它们未添加到列表中,因此在循环后将无法再访问它们。

明确地将它们添加到列表中:

ArrayList<Employee> employees = new ArrayList<Employee>();
for (int x=1; x<=10; x++){
    Employee e = new Employee();
    e.setFirstname("firstname"+ i);
    e.setLastname( "lastname"+ i);
    e.setSalary( i * 1000);
    employees.add(e);
}

现在,您可以通过循环列表来访问列表Employee的属性:

for(Employee e : employees) {
    // called once per Employee in the list
    System.out.println(e.getFirstName());
}

作为辅助节点,从一开始就尝试避免使用e 这样的单字符标识符。现在可能很明显,e代表员工,但不一定在半年内,甚至更糟糕的是,对另一位开发人员而言。在更大的代码库中,这个问题变得更糟。

答案 1 :(得分:2)

我在这里使用流API。像employees.stream()。map(Employees :: getFirstname).toArray()应该这样做。

答案 2 :(得分:1)

你可以使用Lambda表达式的力量......

实施例

public static void main(String[] args) {
    List<Employee> abc = new ArrayList<>();
    abc.add(new Employee());
    abc.add(new Employee());
    abc.add(new Employee());
    List<String> lastNamesList = abc.stream().map(Employee::getLastName)
        .collect(Collectors.toCollection(ArrayList::new));
        System.out.println(resultJava8);
}