org.hamcrest.Средства сопоставления для одновременного сопоставления различных свойств объекта

#java #hamcrest #lambdaj

#java #hamcrest #lambdaj

Вопрос:

Я пытаюсь сопоставить два разных свойства объекта с помощью org.hamcrest.Средства сопоставления. Вот оно:

 List<LeaveApply> leaveApplyList = Lambda.select(
   allLeaveApplyList,
       Matchers.allOf(
            Lambda.having(
                Lambda.on(LeaveApply.class).getUser().getId(),   
                Matchers.equalTo(userId)), 
            Lambda.having(
                Lambda.on(LeaveApply.class).getDate(),
                Matchers.allOf(
                    Matchers.greaterThanOrEqualTo(fromDate), 
                    Matchers.lessThanOrEqualTo(toDate)))
                 )
              );
  

Он выдает список объектов LeaveApply, у которых идентификатор пользователя равен заданному идентификатору, а дата меньше или равна текущей дате и больше или равна from-date. Это работает. Я хочу знать, правильный ли это способ сопоставления различных полей свойств?

Ответ №1:

Насколько я вижу, это должно сработать. Вы можете сделать два улучшения: использовать статический импорт, чтобы сделать его более читаемым, и использовать having(...).and(...) вместо использования allOf :

 import static ch.lambdaj.Lambda.*;
import static org.hamcrest.Matchers.*;

List<LeaveApply> leaveApplyList = select(allLeaveApplyList, having(on(LeaveApply.class).getUser().getId(), equalTo(userId)).and(on(LeaveApply.class).getDate(), allOf(greaterThanOrEqualTo(fromDate), lessThanOrEqualTo(toDate)))));