как вернуть тип грузовика с наименьшей грузоподъемностью, и если вес превышает лимит вернуть сообщение WeightTooHighException в этом задании?

Есть грузовик Truck, у которого задана максимальная грузоподъемность.

Грузовики делятся на 3 типа в зависимости от грузоподъемности:

  • Pickup - до 2 тонн
  • SmallBoxTruck - до 12 тонн
  • SemiTrailer - до 20 тонн

Возвращает тип грузовика с наименьшей грузоподъемностью, который сможет перевести заданный вес.

Если вес слишком большой, то метод должен кинуть WeightTooHighException с сообщением "слишком большой вес".

Пример:

1_000 -> Pickup   (для одной тонны достаточно пикапа)

Вы можете решить это задание как через Stream, так и через цикл.

Какой код выйдет проще и легче для понимания, тот и используйте.

Подсказка: Доступные значения в enum можно перебирать через метод values()

Совет: Нажмите Ctrl+Q (Cmd+Q) чтобы увидеть комментарии с форматированием.

Я пока обычным методом не могу даже пройти задание, не пойму, как правильно вернуть WeightTooHighException

public static TruckType getTypeByWeight(int weight) {

    if (TruckType.Pickup.canHandleWeight(weight)) {
        System.out.println(TruckType.Pickup);
        return TruckType.Pickup;
    }
    if (TruckType.SmallBoxTruck.canHandleWeight(weight)) {
        System.out.println(TruckType.SmallBoxTruck);
        return TruckType.SmallBoxTruck;
    }
    if (TruckType.SemiTrailer.canHandleWeight(weight)) {
        System.out.println(TruckType.SemiTrailer);
        return TruckType.SemiTrailer;
    } else {
        return
    }
}

Ссылка с заданием https://github.com/lislon/streams-assignments задание task4 1ое


Ответы (1 шт):

Автор решения: Alex Rudenko

Массив значений, который возвращается из TruckType.values(), имеет фиксированный порядок, поэтому в задании и сказано использовать цикл или поток Stream API, соответственно какой тип грузовика будет найден раньше, тот и должен быть возвращен:

public static TruckType getTypeByWeight(int weight) {
    for (TruckType tt : TruckType.values()) {
        if (tt.canHandleWeight(weight)) {
            System.out.println(TruckType.Pickup);
            return tt;
        }
    }
    throw new WeightTooHighException("No truck type for weight = " + weight);
}

Аналогично можно использовать Stream API:

Данной информации должно быть достаточно для самостоятельного решения данного упражнения при помощи Stream API.

→ Ссылка