这个表达式的目标类型应该是一个函数式接口
The target type of this expression should be a functional interface
下面的一段代码在
处给我一个编译错误
.filter(Book::getPrice >200)
Compilation error is:
The target type of this expression should be a functional interface
public void skipData() {
List<Book> bookList = books.stream()
**.filter(Book::getPrice >200)**
.skip(5)
.collect(Collectors.toList());
}
我的 Book.java class 看起来如下:
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
}
我尝试 运行 在 Eclipse(火星)和 cmd 行上执行此操作,发现同样的问题。
但如果我将其更改为 .filter(b -> b.getPrice() >200)
它会起作用。
我不清楚为什么方法参考在我的情况下不起作用。
filter 方法使用一个函数,该函数采用单个参数和 returns 一个布尔值来确定是接受元素还是将其过滤掉。
Book::getPrice >200
不是任何类型的函数。它甚至不是 boolean
,因为您将方法引用与整数进行比较,从而导致垃圾。
b -> b.getPrice() >200
是一个函数 (lambda),它接受您正在过滤的流的元素 (b
) 并检查该特定元素的价格是否可以接受。
Book::getPrice > 200
不是有效的 Java 表达式。
任何可以将 lambda 表达式作为参数的方法,都可以采用以下 一个 :
- 一个 lambda 表达式:
b -> b.getPrice() > 200
- 一个 lambda 块:
b -> { return b.getPrice() > 200; }
- 方法参考:
Book::isPriceAbove200
- 匿名 class:
new Predicate<Book>() { public boolean test(Book b) { return b.getPrice() > 200; }}
方法引用允许重复使用方法。
下面的一段代码在
处给我一个编译错误.filter(Book::getPrice >200)
Compilation error is: The target type of this expression should be a functional interface
public void skipData() {
List<Book> bookList = books.stream()
**.filter(Book::getPrice >200)**
.skip(5)
.collect(Collectors.toList());
}
我的 Book.java class 看起来如下:
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
}
我尝试 运行 在 Eclipse(火星)和 cmd 行上执行此操作,发现同样的问题。
但如果我将其更改为 .filter(b -> b.getPrice() >200)
它会起作用。
我不清楚为什么方法参考在我的情况下不起作用。
filter 方法使用一个函数,该函数采用单个参数和 returns 一个布尔值来确定是接受元素还是将其过滤掉。
Book::getPrice >200
不是任何类型的函数。它甚至不是 boolean
,因为您将方法引用与整数进行比较,从而导致垃圾。
b -> b.getPrice() >200
是一个函数 (lambda),它接受您正在过滤的流的元素 (b
) 并检查该特定元素的价格是否可以接受。
Book::getPrice > 200
不是有效的 Java 表达式。
任何可以将 lambda 表达式作为参数的方法,都可以采用以下 一个 :
- 一个 lambda 表达式:
b -> b.getPrice() > 200
- 一个 lambda 块:
b -> { return b.getPrice() > 200; }
- 方法参考:
Book::isPriceAbove200
- 匿名 class:
new Predicate<Book>() { public boolean test(Book b) { return b.getPrice() > 200; }}
方法引用允许重复使用方法。