我有一个简单的方法:
public int getPrice(String bookingName)
{
//return the price of a booking
}
我也有课:
public class Booking
{
String name;
...
}
我想将预订分组在地图上(键=预订名称,值= getPrice(bookingName)),所以我做了:
public TreeMap<String, Integer> bookingForName() {
return bookings.stream().
collect(Collectors.groupingBy(Booking::getName,Collectors.summingInt(getPrice(Booking::getName))));
}
这不起作用,它说:
此行有多个标记:
- The target type of this expression must be a functional interface
- The method getPrice(String) in the type Manager is not applicable for the arguments `(Booking::getName)`
我该怎么办? 谢谢!
答案 0 :(得分:4)
您的getPrice()
方法使用的是String
,而不是功能接口,因此您无法调用getPrice(Booking::getName)
,即使可以,summingInt
也不会接受int
。
更改:
Collectors.summingInt(getPrice(Booking::getName))
收件人:
Collectors.summingInt(b -> getPrice(b.getName()))
还要注意,Collectors.groupingBy
返回Map
,而不是TreeMap
。如果必须使用TreeMap
,则应调用groupingBy
的其他变体。
public TreeMap<String, Integer> bookingForName() {
return bookings.stream()
.collect(Collectors.groupingBy(Booking::getName,
TreeMap::new,
Collectors.summingInt(b -> getPrice(b.getName()))));
}