【问题标题】:How to get String array from String instance variable in ArrayList of object?如何从对象的 ArrayList 中的 String 实例变量中获取 String 数组?
【发布时间】:2016-10-20 10:15:34
【问题描述】:

我有以下课程Employee

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

我为这个类建立了一个ArrayList,并添加了一些Employees,如下:

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 ArrayList 动态获取所有Employees 的名字作为String 数组?
我要问的是:

String employeesFirstname = employees.firstname;

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

这不是关于如何访问 ArryList 中的值,而是关于如何获取特定属性的所有值,例如 ArrayList 中的 firstname,作为使用 java 7 的 Android 中的 String 数组类型。。 p>

【问题讨论】:

    标签: java android arrays arraylist collections


    【解决方案1】:

    首先,您的代码不会将任何Employees 添加到您的列表中。您首先实例化列表,然后创建一些 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);
    }
    

    现在您可以访问列表中Employees 的属性通过遍历列表

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

    作为一个侧节点,从一开始就尽量避免使用像e这样的单字符标识符。现在对您来说可能很明显e 代表“员工”,但对于另一位开发人员来说,半年后就不一定了,甚至更糟。这个问题在更大的代码库中会变得更糟。

    【讨论】:

    • 谢谢,我在这里写的很快,忘了写 .add 方法,反正你明白了,我的问题不是关于访问属性,而是标题为:如何获取字符串数组变量的问题来自 ArrayList 中的属性?
    • 如果您使用的是 Java 8,则最好使用 Stream API 将列表映射到具有名字的字符串数组,如下面的答案所述。
    • 我在 android 中使用 java 7 作为默认语言
    【解决方案2】:

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

    【讨论】:

    • 你的答案是我想要的,但我正在寻找 java 7 语言的答案。
    • 不幸的是,我不知道 Java 7 中有任何这样的结构。在我看来,Lambda 表达式是对 Java 8 最大的改进之一,这也是原因之一。恐怕你只需要写出来。
    【解决方案3】:

    您可以为此使用 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);
    }
    

    【讨论】:

    • 在 android (java 7) 中 ArrayList 类中没有 .stream 方法
    猜你喜欢
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2011-07-02
    相关资源
    最近更新 更多