带参数的方法引用

mos*_*aab 8 java currying java-8

我正在寻找一种方法将制表符分隔的String映射到数组.目前,我正在使用lambda表达式:

stream.map(line -> line.split("\t"));
Run Code Online (Sandbox Code Playgroud)

有没有办法用方法参考做到这一点?我知道这stream.map(String::split("\t"))不起作用,但我想知道是否有替代品.

Mis*_*sha 7

你可以这样做:

static<T,U,R> Function<T,R> curry(BiFunction<? super T, ? super U, ? extends R> f, U u) {
    return t -> f.apply(t, u);
}
Run Code Online (Sandbox Code Playgroud)

然后你就能做到:

stream.map(curry(String::split, "\t"));
Run Code Online (Sandbox Code Playgroud)

  • 这有效,但这就像走在建筑物周围去隔壁; 你正在引入一个新的抽象,所以你可以使用方法参考.使用lambda代码更清晰,更简单. (6认同)
  • 您可以通过替换`来简化签名.超级U`与`U`作为第二个参数`U u`无论如何都会接受'U`的子类型(这与`T`和`R`不同,因为这两个参数由返回类型使用). (3认同)