【发布时间】:2014-08-09 11:24:33
【问题描述】:
我有一个 JPA 类“项目”,它有一个 'Employee' 列表,getEmployeeList() 返回 Employees 列表。
public class Project implements Serializable {
@ManyToMany(targetEntity=Employee.class)
private List<Employee> employeeList;
public List<Employee> getEmployeeList() {
return this.employeeList;
}
}
public class Employee implements Serializable {
@Basic
private EmployeeType type;
public EmployeeType getType() {
return this.type;
}
}
public enum EmployeeType implements Serializable{
EDITOR,
AUDITOR,
ADMIN,
INACTIVE
}
我有一个“审计员”类型的员工,当我运行以下命令时
for(Employee e: p.getEmployeeList()){
if(e.getType()==EmployeeType.AUDITOR)
found=true;
}
它应该返回true,但是当我运行时
(p.getEmployeeList()).stream().anyMatch((e) -> (e.getType()==EmployeeType.AUDITOR))
它返回错误
我做错了什么?
【问题讨论】:
-
他在比较枚举变量,所以不应该这样工作吗?代码对我来说似乎很好,即使它有不必要的括号
p.getEmployeeList().stream().anyMatch(e -> e.getType() == EmployeeType.AUDITOR)也可以。 -
是的,你的权利。我要删除评论。
-
您确定
p.getEmployeeList()不会返回空列表吗?如果是这样,found将保持其初始值(可能您错误地初始化为 true),而根本不进入循环,但 anyMatch 将返回 false。 -
我的
found初始值为 false,我在同一个数据集上运行循环和 anyMatch,因此它应该返回相同的结果。 -
尝试在
anyMatch()之前将.peek(System.out::println)放入流中,以查看实际输入的内容。
标签: java jpa arraylist java-8 java-stream