方法返回 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);
}
}
我目前需要一个方法返回的列表的副本,所以我在 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);
}
}