как вернуть тип грузовика с наименьшей грузоподъемностью, и если вес превышает лимит вернуть сообщение 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 шт):
Массив значений, который возвращается из 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:
- получить поток значений
TruckTypeпри помощиArrays::stream - отфильтровать этот поток, используя
Stream::filter - взять первое значение, используя
Stream::findFirst, которое возвращаетOptional<TruckType> - использовать
Optional::orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable, чтобы вернуть найденный тип, или выбросить требуемое исключение.
Данной информации должно быть достаточно для самостоятельного решения данного упражнения при помощи Stream API.