Я не уверен, что вы пытаетесь сделать здесь. Я вижу три проблемы с вашим кодом, первая из которых, возможно, отвечает на ваш вопрос:
1) Вам нужно передать Function<CommonNumber, CommonNumber>
в numberValidating.isExisting()
. То есть функция, которая принимает CommonNumber
и возвращает CommonNumber
. Я не знаю, откуда это должно прийти. Похоже, это проблема, о которой вы спрашиваете, но если у вас был один из них или вы построили один с лямбдой, у вас не должно возникнуть проблем с передачей того, где у вас есть //parameter here
.
2) Вы передаете лямбду, которая возвращает Predicate
в ваш метод filter()
, но filter()
занимает Predicate
. Так что я думаю, что вам не нужна дополнительная лямбда. Я думаю, что вы хотите напрямую передать результат вызова NumberValidation.isExisting()
.
3) Ваш звонок на filter()
вернет Optional<CommonNumber>
, но вы пытаетесь вернуть его как CommonNumber
. Так что вам нужно вытащить CommonNumber
из Optional
и вернуть его.
Применяя эти три идеи к вашему коду, вот что-то, что компилируется. Я полагаю, что вы, вероятно, хотите передать более интересную функцию, чем p -> p
. Кроме того, я не знаю, хотите ли вы проверить Optional
и передать что-то другое, если оно не содержит CommonNumber
. В любом случае, это должно помочь вам начать:
public CommonNumber apply(CommonNumber t) {
return Optional.of(t).filter(NumberValidation.isExisting(p -> p)).get();
}
Ваш NumberValidation
класс выглядит нормально, как есть.
В случае, если p -> p
не полностью отвечает на вопрос, как передать Function<CommonNumber, CommonNumber>
в ваш метод, вот еще один пример, который более явно создает такую функцию:
static CommonNumber someCommonNumberProcessor(CommonNumber cn) {
return cn;
}
public CommonNumber apply(CommonNumber t) {
return Optional.of(t).filter(NumberValidation.isExisting(Test2::someCommonNumberProcessor)).get();
}
Это все внутри класса с именем Test2
.