gpt4 book ai didi

java - 如何将函数引用传递到我的方法中并使用它们?

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:54 24 4
gpt4 key购买 nike

我有一个工作方法,我想使用 lambda 或函数引用使其更通用。也就是说,对于在我的方法中调用的一些方法,我想将它们指定为我的方法的参数。但是我不太明白。

假设我有以下基本类结构

class B {}
class C {
public Set<Integer> getIds() { ... }
public void addB(B b) { ... }
}

我有我的工作方法

private void p1(Map<Integer, C> cs, Map<Integer, B> bs) {
for (C c : cs.values()) {
for (Integer id : c.getIds()) {
if (bs.containsKey(id)) {
c.addB(bs.get(id));
}
}
}
}

因此称为 p1(cs, bs); - 到目前为止一切顺利。

使它更通用的第一步是为 getIds() 提供一个 lambda。方法。我已经实现了这一点:

private void p1(Map<Integer, C> cs, Map<Integer, B> bs, Function<C, Set<Integer>> f) {
for (C c : cs.values()) {
for (Integer id : f.apply(c)) { // Change here
if (bs.containsKey(id)) {
c.addB(bs.get(id));
}
}
}
}

这样称呼:p1(cs, bs, C::getIds); - 再次,到目前为止一切顺利。我现在传入getIds()作为我的函数的参数并使用它。

现在我想为 addB() 提供一个 lambda方法作为 p1() 的第四个参数我找不到正确的方法。我尝试了几件事,例如。 FunctionConsumer<B> ,但我不知道该怎么做。有什么建议吗?

最佳答案

A BiConsumer<C,B>应该工作:

private void p1(Map<Integer, C> cs, Map<Integer, B> bs, Function<C, Set<Integer>> f, BiConsumer<C,B> cons) {
for (C c : cs.values()) {
for (Integer id : f.apply(c)) {
if (bs.containsKey(id)) {
cons.accept(c,bs.get(id));
}
}
}
}

然后你可以传递lambda表达式(c,b)->c.addB(b)或方法引用C::addB作为方法的第四个参数。

关于java - 如何将函数引用传递到我的方法中并使用它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49357563/

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