使用方法,可在流中返回Int

时间:2018-07-03 10:55:16

标签: methods java-8 get java-stream collectors

我有一个简单的方法:

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)`

我该怎么办? 谢谢!

1 个答案:

答案 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()))));

}