gpt4 book ai didi

lambda - 组合对特定类型的任意对象的实例方法的引用

转载 作者:行者123 更新时间:2023-12-01 12:15:27 26 4
gpt4 key购买 nike

编译没有错误:

Function<T, List<R>> f = T::getRs;
Function<List<R>, Stream<R>> g = List::stream;
Function<T, Stream<R>> h = f.andThen(g);
List<T> ts = ...;
ts.stream().flatMap(h);

但这会产生错误:

List<T> ts = ...;
ts.stream().flatMap(T::getRs.andThen(List::stream));

错误是:

error: method reference not expected here
.flatMap(T::getRs.andThen((List::stream)))
^
error: invalid method reference
.flatMap(T::getRs.andThen((List::stream)))
^
non-static method stream() cannot be referenced from a static context
where E is a type-variable:
E extends Object declared in interface Collection

我原以为这两种方法是等价的。我缺少一些语法吗?也许在某处分组?如果可能的话,我更愿意采用后一种“单线”方法。

最佳答案

这不是方法引用的正确语法;看起来好像您正在尝试这样调用(请注意括号,即使它仍然不正确):

List<T> ts = ...;

ts.stream().flatMap((T::getRs).andThen(List::stream));

要将其放在一行中,您可以将其拆分为对 Stream#mapStream#flatMap 的调用:

List<T> ts = ...;

ts.stream().map(T::getRs).flatMap(List::stream);

关于lambda - 组合对特定类型的任意对象的实例方法的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48859005/

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