当前位置: 首页 > 面试题库 >

将方法引用与参数一起使用

吕飞翼
2023-03-14
问题内容

我刚刚开始学习Java流,并遇到了问题。请看下面的例子。这是Node类的一部分:

private Map<String, Node> nodes;

public Optional<Node> child(String name) {
    return Optional.<Node>ofNullable(nodes.get(name));
}

private void findChildren(String name, List<Node> 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链接问题的方法不起作用的原因是,您实际上是在尝试绑定 两个
参数,以将三参数函数转换为一参数函数。没有类似的简单解决方案,interface因为三参数使用者没有标准功能。

它看起来像

interface ThreeConsumer<T, U, V> {
    void accept(T t, U u, V v);
}
html" target="_blank">public static <T, U, V> Consumer<T> 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));吗?



 类似资料:
  • 问题内容: 考虑以下代码段: 显然不知道可以将a馈送到需要的方法(实际上,它的文档说它在寻找 具有指定名称和形式参数完全相同的方法 )。 是否有一种直接的方法来像上面那样以反射方式查找方法,但是要考虑多态性,以便上述反射示例在查询参数时可以找到该方法? 问题答案: 该反射教程 建议使用样本进行查找

  • 问题内容: 这是我尝试在其上使用该函数的循环: 有办法吗?如果不是参数,那将是微不足道的,但是我不确定如何处理。 问题答案: 用途: 创建一个新的可调用对象,除了传递给该新的可调用对象的内容之外,该参数还将对包装的函数应用所有参数(包括关键字参数)。

  • 问题内容: 我创建了一个带有类型实参的方法,使用这些类型实参返回一个通用类型,并获取也取决于类型实参的参数。当我使用lambda作为参数时,编译器会强迫我指定方法的类型参数,这感觉不对。 我正在设计一个实用程序类,其中包含要与一起使用的方法。它将每种集合条目映射到包含键和值元素的FlatEntry,并且可以使用构建器在多个级别上执行此操作。受影响的方法是。这是代码: 问题在于它的用法。说我有: 我

  • 问题内容: 给定以下使用泛型类型参数的类型化React组件,我该如何将其包装在React的新API中? 上面的方法无法定义泛型。 问题答案: 因此,为了扩大问题范围,这实际上是关于在更高阶函数中保留泛型类型的问题。的以下用法将正确类型检查(在中) 但是,泛型会立即解析为,而不是保留为泛型。因此,以下内容不会进行类型检查 在此Typescript发行凭单中跟踪了相关的发行。

  • 问题内容: 我一直在尝试创建一个可以与python中的函数和方法一起使用的装饰器。它本身并不难,但是在创建带有参数的装饰器时,似乎确实如此。 上面的代码正确地包装了函数/方法,但是对于方法,参数是它正在操作的实例,而不是第一个非自变量。 有没有办法判断装饰器是应用于函数而不是方法,并进行相应处理? 问题答案: 扩大方法。可以将其概括为装饰器装饰器。 这样,您可以使装饰器自动适应其使用条件。 请注意

  • 问题内容: 我的主页上的所有页面上都有一个函数,我希望它可以通过某些jQuery Ajax方法运行。 我现在有一些这样的代码 jQuery的 母版页中的HTML 我的主VB中的Asp.Net代码 当前,除非我将Web方法移至VB页面,否则此方法不起作用 有什么办法可以改变这部分吗 要使用母版页功能? 我尝试将其更改为 但这只是给我一个404错误 有任何想法吗? 提前致谢 问题答案: 您的网络方法代