powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
25 сообщений из 240, страница 2 из 10
jdk17
    #40105784
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Большой Синий Кит
Roman Osipov,

Хорошо, есть java 8, есть лист объектов с 10 пропертями - этот лист нужно обойти, и, при определенном условии изменить изменить 1 или 2 поля объекта, и собрать обратно в коллекцию. Объект должен быть immutable, с правильным hashCode, equals, красивым toString() (включающий parent), наследоваться от другого ParentData, причем менять проперти нужно и те, что в парент.

Напишите это, пожалуйста.

class ParentData
class Data extends ParentData

var parentData = property1
var data = property2, property3


var dataList = List<Data>

// process data list and update property1 and property3, get immutable collection of immutable objects.
поддерживаю баттл)
Ближе к коду!


Да я уже написал это. Тут минута нужна, но товарищ, видимо, не может


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
    @Value
    @NonFinal
    @SuperBuilder(toBuilder = true)
    private static class ParentData{
        String property1;
    }

    @Value
    @SuperBuilder(toBuilder = true)
    @EqualsAndHashCode(callSuper = true)
    private static class Data extends ParentData {
       String property2;
       String property3;
    }


var result =
                dataList.stream()
                        .map(data -> data.toBuilder()
                                .property1("newOne")
                                .property2("newThree")
                                .build())
                        .collect(Collectors.toUnmodifiableList());




Все. Ждем товарища.
...
Рейтинг: 0 / 0
jdk17
    #40105785
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит, Для реальной обработки стримов данных обычно достаточно того, что объект сериализуется/десериализуется. Хэш код тут ни при чем. Еще раз повторяю - только в небольшом количестве случаев объекту реально надо прописывать хэш-код. Есть объекты с поведением, есть DTO - какой еще тип объектов можете назвать, который обширно используется в приложениях?
...
Рейтинг: 0 / 0
jdk17
    #40105788
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
Большой Синий Кит, Для реальной обработки стримов данных обычно достаточно того, что объект сериализуется/десериализуется. Хэш код тут ни при чем. Еще раз повторяю - только в небольшом количестве случаев объекту реально надо прописывать хэш-код. Есть объекты с поведением, есть DTO - какой еще тип объектов можете назвать, который обширно используется в приложениях?



Короче, разработчик *распределенных* /и/ высоконагруженных приложений с 30-ти летним опытом, я тут ликбез по полной устраивать не буду.
...
Рейтинг: 0 / 0
jdk17
    #40105794
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov,
Код будет?
...
Рейтинг: 0 / 0
jdk17
    #40105795
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без Lombok этот код не написать что ли? Если речь о двух классах с тремя свойствами, то в чём проблема написать все эти getter/setter вручную? Если у вас сотни или тыщи таких классов с десятками свойств, ну в IDE обычно есть средства автоматизации, которые за вас напишут этот boilerplate-код. Либо эта схема данных должна описываться в виде модели или на DSL, из которых нужный код может генериться. Не понимаю почему эта задача должна решаться именно Lombok'ом.
...
Рейтинг: 0 / 0
jdk17
    #40105797
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Без Lombok этот код не написать что ли? Если речь о двух классах с тремя свойствами, то в чём проблема написать все эти getter/setter вручную? Если у вас сотни или тыщи таких классов с десятками свойств, ну в IDE обычно есть средства автоматизации, которые за вас напишут этот boilerplate-код. Либо эта схема данных должна описываться в виде модели или на DSL, из которых нужный код может генериться. Не понимаю почему эта задача должна решаться именно Lombok'ом.


Послушайте, Вы притворяетесь, что ли?

Дааааа.. видимо, правду пишут, что (как минимум) Java форум помер.
...
Рейтинг: 0 / 0
jdk17
    #40105798
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
двух классах с тремя свойствами

Ares_ekb
вас сотни или тыщи таких классов с десятками свойств
а посередине?
Вы сами показываете какой то максимализм. Либо три либо миллион.
Дак сколько соток копать лопатой? 3 или гектар?
...
Рейтинг: 0 / 0
jdk17
    #40105799
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта задачка слишком тривиальная. Сделайте мне допустим редактор ER моделей с помощью Lombok. Нужно чтобы модели, которые рисуют пользователи хранились в базе на сервере, чтобы было API для работы с моделями, чтобы сам редактор моделей был на клиенте в браузере. Для этого нужно дофига кода:

1) Код для работы с базой (например, Hibernate'овые Entity-классы)
2) DTO для передачи на клиент
3) Мапинги между 1 и 2 в обе стороны
4) REST API или что-то такое
5) Клиентский код (JavaScript-классы)

Причём, если в этот редактор моделей я хочу добавить какие-то новые типы объектов (пусть это будет редактор каких-нибудь расширенных ER моделей или вообще других моделей), то мне нужно обновить код по всем этим 5 пунктам.

Толку от того, что Lombok избавит меня от написания getter/setter, создания билдеров и т.п. Мне нужно на порядок больше boilerplate-кода, совершенно разного. Один из вариантов - это описать схему данных в виде какой-нибудь Ecore-метамодели и сгенерить из неё весь этот код.

В Lombok функциональность мизерная, но проблем со сборкой и т.п. он добавляет порядком, вечно что-то отваливается. Если, уж, нужно упрощать разработку, то использовать нормальные решения, а не урезанные костыли, которые больше проблем добавляют.
...
Рейтинг: 0 / 0
jdk17
    #40105800
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я полностью за автоматизацию разработки, но Lombok - это автоматизация на таких минималках, что толку от неё вообще не видно.
...
Рейтинг: 0 / 0
jdk17
    #40105801
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.
...
Рейтинг: 0 / 0
jdk17
    #40105802
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,
Вы перепутали ветки форума.
По умолчанию в java и особенно в ОРМ говорят о CRUD приложениях.
А потом уже о ГИС, Редакторах и ERP
...
Рейтинг: 0 / 0
jdk17
    #40105804
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Я полностью за автоматизацию разработки, но Lombok - это автоматизация на таких минималках, что толку от неё вообще не видно.
+1 с поправками.
- назовите линейку продуктов
- чел выше наехал на либу не уточняя минималки
...
Рейтинг: 0 / 0
jdk17
    #40105806
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb,

Нет-нет, это слишком тривиальная задача. Я пока еще не придумал, что конкретно попросить Вас мне тут сделать, но Вы обязательно сделайте. С ломбоком или нет - не важно.

Главное, что-нибудь поумнее, с пунктами и подпунктами. Можно любое приложение, но не тривиальное, и чтобы функциональность была не мизерная.... или даже мизерная, не суть - просто я уверен, тут все наслаждаются Вашим умом в любом случае.
...
Рейтинг: 0 / 0
jdk17
    #40105808
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.


Ну вот и выяснили, какой Вы специалист.
Это все очень печально.
Более комментировать не буду.
...
Рейтинг: 0 / 0
jdk17
    #40105809
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Osipov
PetroNotC Sharp
Roman Osipov,
Код будет?


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    static class ParentData {
        String property1;
    }

    static class Data extends ParentData {
        String property2;
        String property3;
    }

    List<Data> result = dataList.stream()
                .peek(data -> {
                    data.property1 = "newOne";
                    data.property2 = "newThree";
                })
                .collect(Collectors.toUnmodifiableList());



Как и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.





авторКак и говорил ранее, хэш/эквалс в большинстве случаев не нужен. А когда нужен без проблем вставляется вызов Appache Commons HashCodeBuilder. Что там, что там - одна строка.

У меня лучше:
Код: java
1.
System.out.println("Hello world!")



+
Стримы тоже не нужны, проперти обновлять не надо, объекты иммутабл не надо, классы тоже, да вообще, выходит, что ничего не надо, все тлен - что так, что этак с точки зрения вечности это все глупая трата времени...

Но при желании, можно вставить весь Apache Commons, можно и Apache Spark - не суть.
А давайте вообще все вставим? Ну просто, ради интереса.
...
Рейтинг: 0 / 0
jdk17
    #40105810
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уууууууууууууу

Я рад, что Blazkowicz и Mayton продолжают присутствовать на этом форуме. Честно говоря, не знаю, как они это выдерживают. Говорю без всякой иронии.
...
Рейтинг: 0 / 0
jdk17
    #40105811
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большой Синий Кит
Blazkowicz
колись где он))
...
Рейтинг: 0 / 0
jdk17
    #40105816
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему я должен что-то "выдерживать" или не выдерживать?

Единсвтенное что меня печалит - это вялая активность всего форума.
Мы выдержали Луговского, Дедала и Студентика. А сегодняшний
трафик - это просто капающая вода из крана.
...
Рейтинг: 0 / 0
jdk17
    #40105819
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, тоже интересно, есть на форуме еще кто-то моложе 40, засирающий код геттерами, сеттерами, билдерами вручную ?
в чем бонус ручной работы ?
...
Рейтинг: 0 / 0
jdk17
    #40105821
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

в разных проектах использовали разные инструменты и подходы. Обычно схема такая.

1) Если есть много типового кода, значит можно его описывать в виде графической модели или придумать для этого специальный DSL, что позволит не писать лишнее.

Хоть для графических моделей, хоть для DSL нужно разработать метамодель. Метамодель описывает семантическую, смысловую составляющую нашего языка. Например, мы делаем какую-нибудь учетно-аналитическую систему и в ней полно совершенно типовых формочек, типового API для доступа к данным, типовых DTO-классов, Entity-классов и т.п. Соответственно в нашей метамодели мы описываем бизнес-сущности, которые нам нужны: формочка, поле формочки, визард (последовательность формочек), правило валидации и т.д. Описать всё это можно в любой нотации: на языке UML, в виде ER модели, в табличке в Excel перечислить сущности и атрибуты - вообще без разницы. Очень часто для этого используется язык Ecore . В статье последняя картинка это как-раз пример Ecore-метамодели. В нашем случае была бы метамодель описывающая атрибуты и связи между такими сущностями как формочка, поле, визард и т.п.

2) Затем для этой метамодели нужно разработать конкретный синтаксис: либо сделать редактор диаграмм ( раз , два ), на котором люди смогут описывать уже конкретные формы, либо описать синтаксис DSL ( раз , два ), чтобы они всё это делали в текстовом виде.

Для создания редакторов диаграмм можно использовать Sirius . По ссылке можно посмотреть много примеров разных нотаций для моделей. Для создания DSL раньше можно было использовать EMFText (он у меня в статьях описывается). Сейчас в основном используют Xtext , там смысл тот же.

На этом этапе у нас есть инструмент с помощью которого пользователи системы или разработчики могут описывать формочки или что там ещё им нужно.

3) Теперь из этих моделей можно что-то генерить. Для генерации кода из моделей можно использовать Xtend . Сейчас ощущение, что его забросили. У него было две ключевые особенности. Он позиционировался как улучшенная Java, но с появлением Kotlin и улучшением самой Java это потеряло актуальность. И второй момент: на нём очень удобно писать кодогенераторы - для этого он и сейчас продолжает использоваться.

Можно тупо писать кодогенераторы на Java, и часто так делают, но мне не очень нравится.

Для генерации кода из Ecore моделей можно использовать Acceleo .

Ещё один вариант - это не генерить код сразу из модели, а сначала преобразовать эту модель в другую модель, и затем последнюю сериализовать в текстовое представление. Например, мы в одном проекте описывали структуру документов на языке UML, описывали правила валидации этих документов на языке OCL . Затем генерили из всего этого AST (абстрактные синтаксические деревья) либо для XPath выражений, либо для Java кода. Правила преобразования исходного AST в результирующее описывали на языке QVTo . Полученное AST сериализировали в текст с помощью EMFText (либо сейчас это можно делать с помощью Xtext).

Вообще, есть полно и других инструментов для кодогенерации и т.п.


Смотрю на этот пост, на количество ссылок, аббревиатур и базвордов... Большой Синий Кит и так уже "наслаждается" моими умственными способностями, после этого поста на мне как на специалисте можно просто ставить клеймо профнепригодности.

Наверное, да, Lombok будет попроще. В принципе, Lombok - это тоже один из инструментов модельно-ориентированной разработки. Единственное мы не создаём какой-то свой язык моделирования или DSL. Разработчики Lombok уже создали его за нас и встроили в Java в виде аннотаций. Наверное это имеет право на существование, но я для себя не вижу смысла. Либо автоматизация на уровне Lombok не нужна вообще, либо нужна нормальная полноценная автоматизация, для которой Lombok не достаточно.
...
Рейтинг: 0 / 0
jdk17
    #40105823
Roman Osipov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
H5N1
да, тоже интересно, есть на форуме еще кто-то моложе 40, засирающий код геттерами, сеттерами, билдерами вручную ?
в чем бонус ручной работы ?


Проблема в том, что эти геттеры, сеттеры, билдеры в большинстве случаев просто не нужны при разработке обычных приложений. Но их настойчиво лепят, а потом чтобы не лепить их вручную используют Lombok. Костыль на костыль
...
Рейтинг: 0 / 0
jdk17
    #40105825
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
public record JdkFuckenRecord(String noMore, String getters) {
    
}
...
Рейтинг: 0 / 0
jdk17
    #40105827
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
H5N1
засирающий код геттерами, сеттерами, билдерами вручную ?
Если в проекте условно 2,5 класса, то почему бы и не написать. Если проект чуть сложнее, то я вообще не вижу смысла описывать эти классы в коде вручную. Мне проще описать их в модели или на DSL и сгенерить целиком вместе со всеми вспомогательными мэпперами (Entity-DTO), репозиториями, билдерами и т.п.

Обычно такие классы, у которых куча геттеров, это классы, описывающие какие-нибудь бизнес-сущности, какое-то состояние системы, может быть DTO (но действительно большой вопрос, нафига для них геттеры и сеттеры). Короче, за этими классами стоит какая-то схема данных. Если она небольшая, ну, сделаю я это вручную. Если большая, то буду описывать в полноценной модели.

На мой взгляд Lombok - это тоже засирание проекта, лишние зависимости.
...
Рейтинг: 0 / 0
jdk17
    #40105829
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ares_ekb
Например, мы делаем какую-нибудь учетно-аналитическую систему
Берем low-code платформу типа Oracle APEX... Задача решена
(Извините, не удержался)
...
Рейтинг: 0 / 0
jdk17
    #40105830
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если на проекте сегодня 2 класса, завтра 4, послезавтра 6 что тогда. Через неделю начинать свою схему писать или через 10 дней. Свои генераторы моделей звучит красиво, в итоге есть шанс что кроме автора там ничего никто либо не разберет либо не захочет разбирать.

Буквально недавно попробовал генератор моделей для swagger.json получалось так себе, пришлось выкинуть все что нагенерил (нечитаемо, compile errors, да и вообще все равно все руками проверять судя по ворнингам в логах).


в пользу ломбока, практически все модели в пределах одной страницы не нужно листать ничего. Особенно если есть не просто getter а кастомный геттер. Его сразу видно. Хотя поначалу тоже было не хотелось это ломбок пользовать ибо в IDE генератор, а как разберешся как жил до этого.
...
Рейтинг: 0 / 0
25 сообщений из 240, страница 2 из 10
Форумы / Java [игнор отключен] [закрыт для гостей] / jdk17
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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