我有以下课程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 。
答案 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);
}