Используйте метод, который возвращает Int внутри потока - PullRequest
0 голосов
/ 03 июля 2018

У меня есть простой метод:

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 голосов
/ 03 июля 2018

Ваш метод 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()))));

}
...