“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/