Methods 使用在流中返回Int的方法

Methods 使用在流中返回Int的方法,methods,java-8,get,java-stream,collectors,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()

我有一个简单的方法:

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

}
我该怎么办? 谢谢

您的
getPrice()
方法采用
字符串,而不是函数接口,因此您不能调用
getPrice(Booking::getName)
,即使可以,
summingit
也不接受
int

更改:

Collectors.summingInt(getPrice(Booking::getName))
致:

还请注意,
Collectors.groupingBy
返回一个
Map
,而不是
TreeMap
。如果必须有
树映射
,则应调用
groupingBy
的不同变体

public TreeMap<String, Integer> bookingForName() {
    return bookings.stream()
                   .collect(Collectors.groupingBy(Booking::getName,
                                                  TreeMap::new,
                                                  Collectors.summingInt(b -> getPrice(b.getName()))));

}
公共树映射bookingForName(){
returnbookings.stream()
.collect(收集器.groupingBy(预订::getName、,
树映射::新的,
Collectors.summingit(b->getPrice(b.getName());
}

bookings.stream()。collect(Collectors.groupby(Booking::getName,TreeMap::new,Collectors.summingit(b->getPrice(Booking::getName)))@HadiJ不太清楚
getPrice
不接受
Booking::getName
。它需要一个字符串。谢谢@Eran,刚刚复制了OP post。缺少一个
。除此之外,key和value中的
getName()
是冗余的。您可以使用
return bookings.stream().map(Booking::getName).collect(Collectors.toMap(Function.identity(),this::getPrice,Integer::sum,TreeMap::new))@Holger谢谢。我确信我数对了括号。我喜欢你建议的替代方案。
Collectors.summingInt(b -> getPrice(b.getName()))
public TreeMap<String, Integer> bookingForName() {
    return bookings.stream()
                   .collect(Collectors.groupingBy(Booking::getName,
                                                  TreeMap::new,
                                                  Collectors.summingInt(b -> getPrice(b.getName()))));

}