方法返回 Arraylist 为空

Method returning Arraylist empty

我目前需要一个方法返回的列表的副本,所以我在 for-each 中使用它。 Class 员工扩展了用户。我想要一个只返回员工的列表,它是用户的一个实例,但我认为它不起作用。

public ArrayList<Employee> getEmployeeList() {
        ArrayList<Employee> copy = new ArrayList<>();
        for(User user : ec.getUsersList().getUserList()){
            if(user instanceof Employee){
                copy.add((Employee) user);
            }
        }
        return copy;
    }

这里想用,for好像不是运行列表..

for (Employee a : c.getEmployeeList()) {
            if (!dispEmployee.contains(a)) {
                notSelectedEmployee.addElement(a.toString());
            }
        }

您的代码看起来没问题。查看ec.getUsersList().getUserList()的内容,这个列表有没有元素? 你也可以用 Java 8 风格重写你的方法。它看起来更简单更短

public ArrayList<Employee> getEmployeeList() {
    //check for nulls ec, ec.getUsersList and so on
    return ec.getUsersList().getUserList().stream()
        .filter(user -> user instanceof Employee)
        .collect(Collectors.toList())
}

我是 Java 8、lambda 和更实用的风格的忠实粉丝。我可能会这样写:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Filter {

    public static List<Employee> getEmployeeList(List<User> users) {
        List<Employee> employees = new ArrayList<>();
        if (users != null) {
            employees = users.stream()
                    .filter(u -> u instanceof Employee)
                    .map(u -> (Employee) u)
                    .collect(Collectors.toList());
        }
        return employees;
    }
}

我的 JUnit 测试通过了;我认为这很好。 User 和 Employee 是对您所追求的内容的简单猜测。

import org.junit.Assert;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class FilterTest {

    @Test
    public void testFilter() {
        // setup
        List<User> users = new ArrayList<>();
        users.add(new User("foo", "bar"));
        users.add(new Employee("baz", "bat", "supervisor"));
        users.add(new User("x", "y"));
        users.add(new Employee("alpha", "omega", "developer"));
        List<Employee> expected = new ArrayList<>();
        expected.add((Employee) users.get(1));
        expected.add((Employee) users.get(3));
        // exercise
        List<Employee> actual = Filter.getEmployeeList(users);
        // assert
        Assert.assertEquals(expected, actual);
    }
}