在集合对象内的日期字段中检查空指针时,我遇到了一种奇怪的行为
public class FilterTest {
public static void main(String[] args) {
Collection<EmployeeDto> employees = new ArrayList<EmployeeDto>();
employees.add(new EmployeeDto("", 1111, new Date()));
employees.add(new EmployeeDto("123", 2222, null));
employees.add(new EmployeeDto("22", 3333, new Date()));
employees.add(new EmployeeDto("22", 4444, null));
employees.add(new EmployeeDto("11", 5555, null));
employees.add(new EmployeeDto("22", 6666, null));
employees.add(new EmployeeDto(null, 6666,null));
StandardEvaluationContext stdContext = new StandardEvaluationContext();
stdContext.setVariable("emps", employees);
ExpressionParser parser = new SpelExpressionParser();
**String key4= "#emps.?[dateOfBirth != null ? T(DateUtil).formatDate(dateOfBirth), 'dd/MM/yyyy').contains('25/07/2012') : false]" ;**
Collection<Object> proj1 = (Collection<Object>) parser.parseExpression(
key4).getValue(stdContext);
System.out.println(proj1);
}
class EmployeeDto {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
int age;
Date dateOfBirth;
public EmployeeDto(String name, int age, Date dateOfBirth) {
this.name = name;
this.age = age;
this.dateOfBirth = dateOfBirth;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
}
表达式应返回满足条件的对象集合。但是现在,我遇到了一个异常,即在 null 上找不到 dateOfBirth。所以我尝试了一个新的表达方式
String key4= "#emps.?[dateOfBirth != null ? T(DateUtil).formatDate(#emps.![dateOfBirth], 'dd/MM/yyyy').contains('25/07/2012') : false]" ;
这工作正常。但是当我在集合的第一个对象中添加 null 时,它返回结果为 0,当我检查时,我发现 null 传递给了 DateUtil 类的 formatDate 方法。即员工集合就像`
employees.add(new EmployeeDto("", 1111, null)); // first value is null, and I am getting empty result, but there is one corrrect result
**employees.add(new EmployeeDto("12", 2222, null));**
employees.add(new EmployeeDto("22", 3333, new Date()));
employees.add(new EmployeeDto("33", 4444, null));
employees.add(new EmployeeDto("FIVE", 5555, null));
employees.add(new EmployeeDto("SIX", 6666, null));
employees.add(new EmployeeDto(null, 6666,null));
你能帮我解决这个问题吗,谁能告诉我应该使用正确的表达方式吗?