jav*_*Bee 0 java lambda java-8 method-reference
下面的代码给我一个编译错误
.filter(Book::getPrice >200)
Run Code Online (Sandbox Code Playgroud)
编译错误是:此表达式的目标类型应该是功能接口
public void skipData() {
List<Book> bookList = books.stream()
**.filter(Book::getPrice >200)**
.skip(5)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
我的Book.java类如下所示:
public final class Book {
private String title;
private String genre;
private double price;
public Book(String title, String genre, double price) {
this.title = title;
this.genre = genre;
this.price = price;
}
public double getPrice() {
return price;
}
//other getters
}
Run Code Online (Sandbox Code Playgroud)
我试图在Eclipse(火星)和cmd线上运行它并看到同样的问题.
但如果我改变.filter(b -> b.getPrice() >200)它的工作原理.
我不清楚为什么方法参考在我的情况下不起作用.
Book::getPrice > 200 不是有效的Java表达式.
可以采取一个lambda表达式作为参数,可以采取任何方法一个以下内容:
b -> b.getPrice() > 200b -> { return b.getPrice() > 200; }Book::isPriceAbove200new Predicate<Book>() { public boolean test(Book b) { return b.getPrice() > 200; }}方法参考允许重用方法.
| 归档时间: |
|
| 查看次数: |
2577 次 |
| 最近记录: |