我有以下课程:
class Book {
private String genre;
public Book(String genre) {this.genre = genre;}
public String getGenre() {return genre;}
public class BookFilter {
public boolean isFiction(Book b) {
return b.getGenre().equals("fiction");
}
}
}
我已添加books
列出一些Book
类的对象,现在我想使用方法引用过滤流。如下面的代码所示,使用lambda expression
代码可以正常工作但使用method reference
,它不会编译。
books.stream()
.filter(b->b.new BookFilter().isFiction(b)) //Works fine
//.filter(new Book().new BookFilter()::isFiction); //Will not compile
我知道如果BookFilter
是static nested class
,则以下代码行将通过编译而没有任何问题。
.filter(new Book.BookFilter()::isFiction)
如何使用方法参考从isFiction()
类调用Book
方法?
提前致谢!
答案 0 :(得分:4)
您注释的filter
调用未通过编译的原因是您的Book
类没有无参数构造函数。
如果添加
public Book() {}
然后
books.stream().filter(new Book().new BookFilter()::isFiction);
将通过编译。