Я пытаюсь сравнить объект со списком объектов, чтобы узнать, есть ли этот конкретный объект в списке, однако есть некоторые правила
- Я не хочу переопределять существующие методы
- Я не хочу использовать пользовательские компараторы
- Решение должно использовать уже существующие предикаты
Код ниже:
List<String> PREDEFINED_CODES = Arrays.asList(PredefinedCodes.1, PredefinedCodes.2, PredefinedEventSetupCodes.3, PredefinedEventSetupCodes.4);
private BiPredicate<Event, String> isEventOfCode(){
return (event, code) -> code.equals(event.getCode());
}
private Predicate<Event> isEvendPredefined(){
return event -> PREDEFINED_CODES.stream().findAny(code -> isEventOfCode().test(event,code)).isPresent();
}
Примечание. Это упрощенная версия кода, показывающая мою проблему
Теперь проблема, у меня есть это code -> isEventOfCode().test(event,code)
в этой лямбде. Я не могу проверить значения по отношению к предикату isEventOfCode
, потому что Wrong 2nd argument type. Found: '<lambda parameter>', required: 'java.lang.String'
, хотя я знаю, что PREDEFINED_CODES
- это список строк, поэтому code
- это типа String
Есть ли обходной путь для вызова предиката isEventOfCode()
с параметром из лямбда-выражения? Я не могу изменить тип isEventOfCode()
, поскольку он используется в других частях кода.