使用带参数的方法引用
我刚开始学习Java流并遇到了问题。 请看下面的例子。 这是Node类的一部分:
private Map nodes; public Optional child(String name) { return Optional.ofNullable(nodes.get(name)); } private void findChildren(String name, List result) { child(name).ifPresent(result::add); nodes.values().stream() // .map(Node::findChildren(name, result)) // .forEach(Node::findChildren(name, result)) .forEach(node -> node.findChildren(name, result)); }
我的目的是使用流中每个节点上的名称和结果参数调用#findChildren。 我试图使用方法引用Node :: findChildren没有运气。 我很欣赏其他与->
运算符的解决方案。
是否可以将方法引用与参数一起使用? 我喜欢流的想法,我只想让代码更具可读性。
实际上,我认为有一个类似的问题方法引用与我读过的参数 ,但无法弄清楚如何在我的代码中使用bind2方法。 这是唯一的解决方案吗?
您不能为此目的使用方法引用。 你必须求助于lambda表达式。 链接问题的bind2
方法bind2
的原因是您实际上尝试绑定两个参数以将三个arg函数转换为一个arg函数。 没有类似的简单解决方案,因为没有标准的functioninterface
可供三人消费者使用。
它必须看起来像
interface ThreeConsumer { void accept(T t, U u, V v); } public static Consumer bind2and3( ThreeConsumer super T, U, V> c, U arg2, V arg3) { return (arg1) -> c.accept(arg1, arg2, arg3); }
然后.forEach(bind2and3(Node::findChildren, name, result));
可以工作。 但这真的比.forEach(node -> node.findChildren(name, result));
更简单.forEach(node -> node.findChildren(name, result));
?