我目前需要方法返回的列表的副本,因此我在for-each中使用它。 类员工扩展用户。我希望仅与员工一起返回列表,这是User的实例,但我认为它不起作用。
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());
}
}
答案 0 :(得分:0)
您的代码看起来不错。检查string a = "den";
a += 'e';
a += 'r';
的内容,此列表是否包含任何元素?
您也可以用Java 8样式重写您的方法。看起来更简单,更短
ec.getUsersList().getUserList()
答案 1 :(得分:0)
我是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测试通过了;我觉得很好用户和员工只是对您所追求的目标的简单猜测。
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);
}
}