Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Конвертер на generic / 8 сообщений из 8, страница 1 из 1
12.04.2017, 17:42
    #39437466
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
Часто используется convert из утешен во wrapper вида

Код: java
1.
2.
3.
4.
5.
6.
    public static List<ClientModel> ListClientToListClientModel(List<UserInfo> userInfoList) {
        List<ClientModel> clientModelList = new ArrayList<>();
        if (userInfoList != null)
            userInfoList.forEach(ul -> clientModelList.add(ClientToClientModel(ul)));
        return clientModelList;
    }



Решил переписать на общий

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    public static <T, V> List<V> convertListEntityToListModel(List<T> list, TypeConvert typeConvert) {
        List<V> modelList = new ArrayList<V>();
        list.forEach(l -> {
            V model;
            switch (typeConvert) {
                case CLIENTMODEL:
                    UserInfo userInfo = (UserInfo) l;
                    model = (V) ClientToClientModel(userInfo);
                    break;
...
            }
            if (model != null)
                modelList.add(model);
        });
        return modelList;
    }



Но тут возникла другая проблема, может быть перепутан TypeConvert
Можно ли переписать без использования его (TypeConvert и instanceOf)?
...
Рейтинг: 0 / 0
12.04.2017, 17:54
    #39437475
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
-=Koba=-Часто используется convert из утешен во wrapper вида
Кем утешен?

-=Koba=-Но тут возникла другая проблема, может быть перепутан TypeConvert
Можно ли переписать без использования его (TypeConvert и instanceOf)?
Блин, ну как можно использовать Java 8 и не понимать Single Method Interface?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public static <T, R> List<R> convertListEntityToListModel(List<T> list, FunctionM<T, R> typeConverter) {
    List<V> modelList = new ArrayList<>();
    list.forEach(l -> { //forEach тут нафиг не нужен. Обычный цикл для утилитного метода предпочтительнее
        R model = typeConverter.apply(l);
        if (model != null) modelList.add(model); //Откуда у вас null значения в списке? Нельзя переносить тело условия на новую строку без фигурных скобок.
    });
    return modelList;
}
...
Рейтинг: 0 / 0
12.04.2017, 18:00
    #39437482
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
А ещё не понятно с какого перепугу метод конвертации ещё и отфильтровывает null значения? Для утилитного метода эту хрень можно в аргументы вытащить в виде предиката, а то вдруг кому-то с нулами нужно?
https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html

А ещё метод можно переписать на стрим, для читаемости. Так как ваш код это полный П с точки зрения читаемости.

Код: java
1.
2.
3.
4.
5.
6.
public static <T, R> List<R> convertListEntityToListModel(List<T> list, FunctionM<T, R> typeConverter, Predicate<T> filterCondition) {
    return list.stream()
       .filter(filterCondition)
       .map(typeConverter)
       .collect(Collectors.toList());
}
...
Рейтинг: 0 / 0
13.04.2017, 09:32
    #39437712
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
Спасибо

PuntoSwitcher - entity в утешен перевел...

авторБлин, ну как можно использовать Java 8 и не понимать Single Method Interface?

А можете пояснить про интерефейс
Не совсем понял как ее к метода применить
...
Рейтинг: 0 / 0
13.04.2017, 09:44
    #39437721
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
То есть вы в принципе код выше не поняли?
Single Method Interface aka Functional Interface это фича о которой в Java я мечтал лет 10. Очень не хватало. И как теперь можно ей не пользоваться - я не понимаю.

У вас есть метод ClientToClientModel. Вам больше не нужен код типа
Код: java
1.
2.
3.
4.
 switch (typeConvert) {
                case CLIENTMODEL:
                    UserInfo userInfo = (UserInfo) l;
                    model = (V) ClientToClientModel(userInfo);


Вы можете передать ссылку на метод ClientToClientModel через лямбду. В таких языках как C++ и JavaScript эта возможность существует уже много лет. А в Java единственным аналогом был анонимный класс. Для которого нужно сначала ещё создать интерфейс, а потом ещё сам класс с скучей скобок. Сейчас ничего этого не нужно, в Java 8 масса готовых функциональных интерфейсов, а анонимные классы заменяются лаконичными лямбдами.
...
Рейтинг: 0 / 0
13.04.2017, 09:51
    #39437728
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
BlazkowiczТо есть вы в принципе код выше не поняли?
Single Method Interface aka Functional Interface это фича о которой в Java я мечтал лет 10. Очень не хватало. И как теперь можно ей не пользоваться - я не понимаю.

У вас есть метод ClientToClientModel. Вам больше не нужен код типа
Код: java
1.
2.
3.
4.
 switch (typeConvert) {
                case CLIENTMODEL:
                    UserInfo userInfo = (UserInfo) l;
                    model = (V) ClientToClientModel(userInfo);


Вы можете передать ссылку на метод ClientToClientModel через лямбду. В таких языках как C++ и JavaScript эта возможность существует уже много лет. А в Java единственным аналогом был анонимный класс. Для которого нужно сначала ещё создать интерфейс, а потом ещё сам класс с скучей скобок. Сейчас ничего этого не нужно, в Java 8 масса готовых функциональных интерфейсов, а анонимные классы заменяются лаконичными лямбдами.
Не ну что сразу я понял из ваших комментариев....
Это цинизм и фразу "Вы все говно..." =))

Смотрите создаю

Код: java
1.
2.
3.
4.
@FunctionalInterface
public interface IModelConverter {
    void convert();
}



Как мне теперь навесить его на

Методы типо
AdministratorLogToAdminLogModel(AdminLog entity);
ClientLogToClientLogModel(ClientLog entity)
...
Рейтинг: 0 / 0
13.04.2017, 09:59
    #39437738
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
-=Koba=-Это цинизм и фразу "Вы все говно..." =))

Да, подзаманало знаете ли, когда объясняешь, расписываешь детально, а в ответ комментарий:
"Я не понял. Объясните."
Даже лень вопрос сформулировать и код опробовать?

-=Koba=-Смотрите создаю

Не нужно создавать свои интерфейсы. В Java 8 их уже насоздавали целый пакет
https://docs.oracle.com/javase/8/docs/api/java/util/function/package-summary.html

Код: java
1.
List<ClientModel> result = convertListEntityToListModel(userInfoList, ClazzName::ClientToClientModel,  user -> user != null);
...
Рейтинг: 0 / 0
13.04.2017, 10:28
    #39437766
-=Koba=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Конвертер на generic
Хмм, спасибо суть понял
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Конвертер на generic / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]