#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)))));