|
for в for
|
|||
---|---|---|---|
#18+
Добрый день, Есть объект " Office1 ", который содержит поля, и поля коллекции. Коллекциями может быть несколько полей. Есть объект " Office2 ", это тот же самый объект что и " Office1 ", только некоторые поля называются по другому. " Office1 " - основной объект, " Office2 " - изменения (обновления) к объекту " Office1 " Общий пример описание классов " Office " : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Можно представить объект "Office " как " XML " - древовидная структура и много вложенностей Мне нужно сравнить " Office1 " и " Office2 ", и если какое-то поле отличается, то обновить его в " Office1 " из " Office2 " я думаю сравнивать как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
Получается слишком много for в for Как написать данный код более лаконично и быстро действенней? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 10:47 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks, Но менее читабельней ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 10:51 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks, Разбей на функции если так приспичило Код: java 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 10:53 |
|
for в for
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, не не приспичило)) Хорошо, Спс! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 10:56 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks, Знатно ты поклал на ооп. Надо для каждого класса сделать метод equals а там сравнивать списки сначала по длине, потом по содержимому. То, что ты пытаешься сделать - это позорная процедурщина, ООП евангелисты не за это умирали в интернет-срачах. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:02 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks быстро действенней? Считай для каждого объекта хеш. Для списков полученые хеши сортируй, потом считай хеш из них. Так тебе не придётся идти в лоб и перебирать в двойном цикле. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:05 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks я думаю сравнивать как-то так: переопределить в каждом из классов метод equals для того, чтобы он сравнивал свои поля и поля своей коллекции. в комбинации с org.apache.commons.collections4.CollectionUtils.isEqualCollection будет достаточно компактно crutchmaster Знатно ты поклал на ооп. Надо для каждого класса сделать метод equals а там сравнивать списки сначала по длине, потом по содержимому. лол, я опоздал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:06 |
|
for в for
|
|||
---|---|---|---|
#18+
https://stackoverflow.com/questions/55294391/how-to-compare-two-objects-and-get-the-changed-fields https://github.com/javers/javers Ну вроде как оно) я бы попробовал, покрутил ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:07 |
|
for в for
|
|||
---|---|---|---|
#18+
crutchmaster, С Уважением! Но там написано что, это хоть и похожие объекты, но все же они разного типа, названия и количество полей может отличаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:08 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks Но там написано что, это хоть и похожие объекты, но все же они разного типа, названия и количество полей может отличаться. Я вижу, что у тебя там 2 поля - name и список объектов. Я не знаю, почему кто-то решил, что они разного типа и могут отличаться. В контексте явы это - один тип. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:10 |
|
for в for
|
|||
---|---|---|---|
#18+
Хотя.. коммент вижу: It does not answer to question. javers only shows difference, but does not provide information about field. – Mister_Jesus Feb 28 '20 at 13:14 Наверное не подойдёт. Ну в общем я бы порыл какие-то либы. Ну или как-то написал через дженерики, тут надо подумать... потом, завтра ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:11 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks Мне нужно сравнить " Office1 " и " Office2 ", и если какое-то поле отличается, то обновить его в " Office1 " из " Office2 " Кстати зачем? Можно просто ничего не делать и считать, что office2 - это и есть office1. Или сколнировать office2. Какой смысл всё сравнивать? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:13 |
|
for в for
|
|||
---|---|---|---|
#18+
crutchmaster, Это общий вид, для понимания иерархии, но в объекте "Office1" может быть доп поле а в объекте "Office2" его может не быть или на оборот, и так по всем вложенным объектам. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:15 |
|
for в for
|
|||
---|---|---|---|
#18+
crutchmaster, потому что, обновления приходят не полностью а частично, только некоторые поля, могут придти не корректные данные null, 0, "" и еще нужно логать то на что пришло обновление ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:18 |
|
for в for
|
|||
---|---|---|---|
#18+
Aleks_Aleks но в объекте "Office1" может быть доп поле Тогда у тебя Office1/2 не является классом Office, да и вообще ты вылез за возможности жабки, возьми лучше для такой задачи что-нибудь динамическое типа js или пистона. Там это делается на раз-два. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2021, 11:21 |
|
|
start [/forum/topic.php?fid=59&msg=40056831&tid=2120497]: |
0ms |
get settings: |
25ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
384ms |
get tp. blocked users: |
1ms |
others: | 288ms |
total: | 770ms |
0 / 0 |