Группировать объекты потока в карту - PullRequest
0 голосов
/ 29 мая 2018

У меня есть Stream of Cars с определенным количеством hp и набором hp intervalls.Теперь мне нужно сохранить интервал hp со всеми автомобилями на карте.

Map<hpIntervall, Set<car>>

Класс HPIntervall получил fromHP и toHP int, поэтому я могу получить их с .getTo() и .getFrom().

Я уже попробовал stream.collect(Collectors.groupBy()), но мне кажется, что я неправильно понимаю синтаксис.Может кто-нибудь дать мне подход?

 public static Map<HPIntervall, Set<Car>> groupCarsByHP(Stream<Car> cars,
            Set<HPIntervall> hpIntervalls) {

        return cars.collect(Collectors.groupingBy(c -> {
                    for (HPIntervall hpInt : hpintervalls) {
                        if (c.getHP() >= ic.fromHP() && c.getHP() <= ic.toHP()) {
                            return hpInt;
                        }
                    }
                    return null;
                }, Collectors.toSet()));
    }
}

1 Ответ

0 голосов
/ 29 мая 2018

Ваш вариант использования мне не понятен.Но что-то вроде этого будет работать для вас.К сожалению, я понятия не имею о классе hpIntervall.Предполагая, что интервал получен из Hp - toHp, решение будет примерно таким:, решение будет,

final Map<HPIntervall, Set<Car>> carsByHpInterval = cars.stream()
        .collect(Collectors.groupingBy(Car::getHpIntervall, Collectors.toSet()));
...