#518 Код-ревью сервиса определения типа мяча
Имеется сервис определения типа мяча по ID мяча.
Известно, что:
-
Вызываемый сервис
BallPropertiesServiceвозвращает список свойств (List) для одного мяча. Размер списка от0до2^30; -
Значения
BallProperty.codeот0до9описывают размер мяча (т.е.0- микроскопический,9- гигантский); -
Значения
BallProperty.codeот100до129описывают материал мяча; -
Значения
BallProperty.codeв других диапазонах существуют, но бизнес ценности в данном случае не несут.
Если в списке:
-
Пришел проперти с кодом
7, то считаем, что мяч баскетбольный; -
Пришел проперти с кодом
6, то считаем, что мяч футбольный; -
Пришел проперти с кодом
5, то считаем, что мяч тенисный; -
Пришел проперти с кодом
5и еще проперти102, то считаем, что это ядро; - Не пришло что-то из выше описанного, то считаем, что это мяч для пингпонга.
Гарантируется, что если в списке присутствует BallProperty с кодом из какого-то диапазона, то не может быть в этом же списке BallProperty с другим кодом из этого диапазона (т.е. в одном списке не будет одновременно кодов 1 и 2).
Что не так в данном коде?
@Service
@RequiredArgsConstructor
public class BallTypeService {
private final BallPropertiesService ballPropertiesService;
public BallType getType(Long ballId) {
List<BallProperty> ballProperties = ballPropertiesService.getBallProperties(ballId);
ballProperties.sort(Comparator.comparing(BallProperty::getCode).reversed());
return resolveType(ballProperties);
}
private BallType resolveType(List<BallProperty> ballProperties) {
long propertyNum = ballProperties.get(0).getCode();
long propertyNext = ballProperties.get(1).getCode();
if (propertyNum == 102 && propertyNext == 5) {
return BallType.CANNON_BALL;
}
if (propertyNum == 7) {
return BallType.BASKET_BALL;
}
if (propertyNum == 6) {
return BallType.FOOT_BALL;
}
if (propertyNum == 5) {
return BallType.TENNIS_BALL;
}
return BallType.PING_PONG_BALL;
}
}
public enum BallType {
BASKET_BALL,
FOOT_BALL,
CANNON_BALL,
TENNIS_BALL,
PING_PONG_BALL;
}
// библиотечный код
@Data
public class BallProperty {
private Integer group;
private Integer code;
private String description;
}
public interface BallPropertiesService {
List<BallProperty> getBallProperties(Long itemId);
}
Разбор вопроса
Войди, чтобы начать диалог
Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти
Доступно с Premium
Это лишь одно из решений, доступных с Premium. А ещё:
- 250+ продвинутых лекций
- 1300+ практических заданий
- 500+ решений задач с реальных собеседований
- Именные сертификаты Java Hub
- Расширенный доступ к AI-ментору