java - Map 方法引用链

标签 java lambda java-8

我正在使用 Twitter4J。但我要问的问题更笼统。我想访问给定推文的用户 ID。目前,我有以下两种选择:

//Option 1
stream.map(status -> status.getUser().getId())
      .forEach(System.out::println);

//Option 2:
stream.map(Status::getUser)
      .map(User:getId)
      .forEach(System.out::println);

我不喜欢第一个选项中的 lambda 表达式,也不喜欢在第二个选项中被迫调用两个 maps。有没有办法制作方法引用链?我知道 Status::getUser::getId 不起作用,但我想知道是否有替代方法。

最佳答案

不,这是两种方法。其他任何事情最终都会变得不太清楚。

但是,既然你问了,这里有一些选择。

static<T,U,R> Function<T,R> chain(
        Function<? super T, ? extends U> f1,
        Function<? super U, ? extends R> f2) {
    return t -> f2.apply(f1.apply(t));
}

stream.map(chain(Status::getUser, User::getId))

或者

static<T,R> Function<T,R> func(Function<T,R> f) {
    return f;
}

stream.map(func(Status::getUser).andThen(User::getId))

关于java - Map 方法引用链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26920866/

相关文章:

c++ - 用脚本语言实现 lambda

java - 什么类型的 Java/Swing 布局可以进行停靠和/或锚定?

python - 在 python 中使用 reduce() 序列化一个字符串

c++ - lambda 表达式中的作用域

java - thenAccept 和 thenApply 的区别

java - 将 java 7 嵌套 for 循环转换为使用 java 8 流 API

java - Netbeans Cordova 构建失败错误 1 ​​: The SDK Build Tools revision (19. 0.3) 对于项目来说太低

java - 为什么 Double.infinite 不为无限分数返回 true?

java - 如何将字符串解析为 BigDecimal?

Java 8 流 : How to read lines between two lines specified by line content