Lesson 46 (lambda) for review#98
Conversation
|
|
||
| printList(cars, "Машины отсортированные по году:"); | ||
|
|
||
| cars.sort(Comparator.comparing((Car car) -> car.getIdentifier() |
There was a problem hiding this comment.
Указывать тип в лямбде можно, но не принято - это, по сути, захламление кода, которое ни на что не влияет
|
|
||
| printList(cars, "Машины отсортированные по цвету:"); | ||
|
|
||
| cars.sort(Car::compareTo); |
There was a problem hiding this comment.
Это метод референсы и они будут чутка дальше:)
| } | ||
|
|
||
| private static void soundAll(List<Animal> animals) { | ||
| animals.forEach(Animal::sound); |
There was a problem hiding this comment.
Опять же, тут больше направленность именно на лямбды, а не референсы. Да, в конечном итоге мы придем именно к такому виду. Но пока задача стоит наиболее полно разобраться с принципами описания лямбда-выражений
| @@ -0,0 +1,7 @@ | |||
| package com.walking.lesson46_lambda.task3.exception; | |||
|
|
|||
| public class UnableParsingException extends RuntimeException{ | |||
| } | ||
| } | ||
|
|
||
| private static void printSearchResult(List<?> results) { |
There was a problem hiding this comment.
почему wildcard? тут же предопределен тип
| System.out.println(result); | ||
| } | ||
|
|
||
| System.out.println("-".repeat(23)); |
There was a problem hiding this comment.
сильно недокрутил декомпозицию. получается, что Main отвечает за запуск программы, инициализацию данными, меню, часть внутренней логики пунктов меню (как в случае с фильтрацией) или даже отдельных фильтров (валидация для фильтра по году). Как будто ту мач
| } else { | ||
| String[] filters = Arrays.copyOfRange(arguments, 1, arguments.length); | ||
| List<CarFilter> carFilters = parseFilters(filters); | ||
| CarFilterService carFilterService = new CarFilterService(carFilters); |
There was a problem hiding this comment.
Зачем на каждый вызов создавать инстанс сервисного класса? Сервисы обычно синглтоны, но, что еще важнее, они в 99% случаев - стейтлесс
| @@ -0,0 +1,19 @@ | |||
| package com.walking.lesson46_lambda.task3.model; | |||
|
|
|||
| public class CarFilter { | |||
| String filterName = namesAndValues[i]; | ||
| String filterValue = namesAndValues[++i]; | ||
|
|
||
| if (filterName.equals("yearRange")) { |
There was a problem hiding this comment.
Нам точно нужно заставлять пользователя вводить полное название фильтра? В целом, это ок на данном этапе, иногда и в боевых задачах (от SQL до всяких QL в жира и не только), но для псевдо-gui в консольке кажется избыточным. Всегда есть варианты с нумерацией фильтров и не только.
Опциональное замечание
| package com.walking.lesson46_lambda.task3.model; | ||
|
|
||
| public class CarFilter { | ||
| private final String name; |
There was a problem hiding this comment.
Тут константный набор допустимых значений. Можно о енаме подумать
| return predicate; | ||
| } | ||
|
|
||
| private Predicate<Car> choosePredicateBy(String name) { |
|
|
||
| case "partOfNumber" -> getPartNumberContainsPredicate(); | ||
|
|
||
| case "yearRange" -> getYearInRangePredicate(); |
| return car -> car.getIdentifier() | ||
| .getYear() >= startInclusive && car.getIdentifier() | ||
| .getYear() <= endInclusive; | ||
| } |
There was a problem hiding this comment.
в общем виде - хорошая реализация. Отдельные детали пометил выше
| public class CarService { | ||
| private final List<Car> cars = new ArrayList<>(); | ||
|
|
||
| public CarService(Collection<? extends Car> cars) { |
No description provided.