gpt4 book ai didi

java - 将功能接口(interface)作为参数传递

转载 作者:行者123 更新时间:2023-11-30 07:41:33 25 4
gpt4 key购买 nike

我对函数式接口(interface)很陌生,不知道如何将它作为参数传递。我希望你能帮助我。所以我有一个名为 NumberValidation 的类:

public class NumberValidation {

public static Predicate<CommonNumber> isExisting(Function<CommonNumber, CommonNumber> retrieve){
return (p ->{
return Optional.ofNullable(retrieve.apply(p)).isPresent();
});
}

public static Predicate<CommonNumber> isNotExisting(Function<CommonNumber, CommonNumber> retrieve){
return (p ->{
return !Optional.ofNullable(retrieve.apply(p)).isPresent();
});
}
}

如你所见,我有两个函数,即 isExistingisNotExisting带有参数 Function<CommomNumber, CommonNumber> .假设我想像这样使用其中一个函数:

public CommonNumber apply(CommonNumber t) {
return Optional.of(t).filter(p -> {
return NumberValidation.isExisting(//parameter here);
});
}

我不知道如何传递该参数。我试过 return NumberValidation.isExisting(t)以及return NumberValidation.isExisting(p)但我不断收到错误消息,因为所需的参数是 Function<CommonNumber,CommonNumber>

最佳答案

我不确定你想在这里做什么。我发现您的代码存在三个问题,第一个可能会回答您的问题:

1) 你需要传递一个 Function<CommonNumber, CommonNumber>进入numberValidating.isExisting() .也就是说,一个接受 CommonNumber 的函数并返回 CommonNumber .我不知道那应该来自哪里。这似乎是你要问的问题,但如果你有其中之一,或者你用 Lambda 构建了一个,你应该没有问题将它传递到你有 //parameter here 的地方。 .

2) 您传递的 Lambda 返回 Predicate进入你的filter()方法,但是 filter()需要 Predicate .所以我认为你不想要额外的 Lambda。我想你想直接传递调用 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类(class)看起来还不错。

如果 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 的类中.

关于java - 将功能接口(interface)作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55895746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com