当前位置: 首页 > 知识库问答 >
问题:

使用带有参数的方法引用

欧旻
2023-03-14
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));
}

是否有可能将方法引用与参数一起使用?我喜欢流的想法,我只是想让代码更易读。

实际上,我认为有一个类似的问题,方法引用了一个参数,我读了,但不知道如何在我的代码中使用bind2方法。这是唯一的解决办法吗?

共有1个答案

米俊晤
2023-03-14

不能为此目的使用方法引用。您必须求助于lambda表达式。链接问题的bind2方法不起作用的原因是,您实际上试图绑定两个参数,将三个arg函数转换为一个arg函数。没有类似的简单解决方案,因为没有标准的功能接口可供三个Arg使用者使用。

它必须看起来像

interface ThreeConsumer<T, U, V> {
    void accept(T t, U u, V v);
}
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));简单吗?

 类似资料:
  • 问题内容: 在Java 8中,具有以下类 可以通过方法引用来调用setBornTrue方法: 但是我将如何使用forEach方法并通过 方法引用 使用setBorn ?试: 导致错误“无法解析方法setBorn”。 另外,我该如何传递True的值? 问题答案: 使用lambda: 没有发现仅使用Java 8 API的其他方法。 使用此自定义功能: 你可以做: 如果Java API或库中提供了这种实

  • 我想用Mockito创建一个有三个参数的方法的存根,但我得到了空指针异常 为了这个我在做

  • 我有一个函数将输入作为Mono返回: 我想用初始值3调用发射器一次,然后重复调用,直到达到一定的大小。这个重复逻辑应该在main方法中,所以我不能修改发射器()。 一个简单的解决方案是: 基本上,我正在尝试根据前一个单声道的结果创建另一个具有动态参数的单声道。我知道Mono/Flux是不变的。。。有没有一种简洁、反应迅速的方法?我试过像Flux这样的东西。范围(0,整数。MAX\u值)。zipWi

  • 我通过方法参考获得了关于用lambda替换的声纳信息。但我必须调用字符串上的方法引用???

  • 我在AmazonRDS上使用PostResql9.3w/PostGIS 2.1.8。我有一个名为project_location的表,它定义了“地理Geofence”(每个Geofence本质上都是一个坐标和半径)。地理Geofence使用名为“位置”的几何图形列和名为“半径”的双列存储。我在location列上有一个空间索引。 该表目前约有50,000条记录。如果我查询表格来查找地理Geofen

  • 问题内容: 我想知道带有方法引用和功能接口的所有这些东西如何在较低级别上工作。最简单的例子是我们有一些列表 现在我们要使用Collections类对其进行排序,因此我们可以调用: 但是,如果我们定义自定义比较器,则可能类似于: 问题在于Collections.sort具有两个参数:List和Comparator。由于Comparator是功能性接口,因此可以用具有相同签名(参数和返回类型)的lam