java - 使用方法引用替换链式方法调用

标签 java lambda java-8

“Java 8 Lambdas: Pragmatic Functional Programming”有一个在Stream API 中使用peek 方法的例子。这段代码打印名字以“The”开头的艺术家国籍:

Set<Nationality> nationalities = album.getMusician()
                                 .filter(artist -> artist.getName().startsWith("The"))
                                 .map(artist -> artist.getNationality())
                                 .peek(nation -> System.out.println(nation))
                                 .collect(Collectors.toList());

我想用方法引用重写这段代码:

Set<Nationality> nationalities = album.getMusician()
                                 .filter(artist -> artist.getName().startsWith("The"))
                                 .map(Artist::getNationality)
                                 .peek(System.out::println)
                                 .collect(Collectors.toList());

有没有重写filter(artist -> artist.getName().startsWith("The"))的方案?

最佳答案

您需要创建一个单独的方法,它接受一个艺术家并返回一个 boolean 值:

private boolean nameStartsWithThe(Artist a) {
    return a.getName().startsWith("The");
}

Set<Nationality> nationalities = album.getMusician()
                                 .filter(this::nameStartsWithThe)

或使用静态方法:

private static boolean nameStartsWithThe(Artist a) {
    return a.getName().startsWith("The");
}

Set<Nationality> nationalities = album.getMusician()
                                 .filter(MyClass::nameStartsWithThe)

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

相关文章:

node.js - 在 Vercel 上部署的 Nextjs 中的 api 请求上出现 504/502 错误

java - 可以以某种方式简化此循环代码吗?

java - 运行时高效的公式绑定(bind)

java - Java 代码中出现语法错误 : Cannot cast from Object to int

c++ - 从C++ Lambda函数创建MPI约简运算符

c# - SQLiteNet 索引和 Lambda 表达式

generics - 通用静态方法调用无法在 Java 8 中编译

ubuntu - ubuntu 15.10 和 openjdk-8-jdk 中是否缺少 cacerts 文件?

java - 如何在更改为横向模式android时继续播放视频(恢复视频)

java - JSP 不能在 Java 资源中使用类