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