|
Смена структуры списка
|
|||
---|---|---|---|
#18+
Всем доброго дня. Имеется коллеция объектов List<Order>: Код: java 1.
Необходимо сделать мапу такого формата: Код: java 1.
В идеале конечно же хотелось бы за одну итерацию. Я смотрю в сторону mapName.stream().collect, но пока попытки тщетны. Может кто-то сталкивался с таким? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 10:38 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot попытки тщетны ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 10:58 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot, Не истины ради, а флейма для. Код на Kotlin'е <:o) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 15:53 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
Ну и на Scala - Код: java 1. 2. 3.
Только нафига это тут? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 17:11 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
Друзья, прошу прощения. Я немного не так сформулировал описание. Изначально список объетов такой: Код: java 1.
И на выходе нужно мапу формата вида: Код: java 1.
Я пока сделал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Оно работает. Но минусов много - как минимум 2 раза бежим по одной коллекции. Ну и может как-то это можно оптимизировать и сделать по другому? Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 18:42 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot Оно работает. Но минусов много - как минимум 2 раза бежим по одной коллекции. Ну и может как-то это можно оптимизировать и сделать по другому? Спасибо! Ты какую вообще задачу поставил? Просто решить группировку - это одно. Решить в один проход - это другое. Решить на Котлин или на Scala или решить с использованием stream это третье. Всё сразу - не будет. Во всех случаях мы превращаемся в слух и пытаемся понять что-же на самом деле хочет автор и какого еще птичьего молока ему надо. Вот тебе молоко пингвинов. Вот - страусов. Бери. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 19:49 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot Друзья, прошу прощения. Я немного не так сформулировал описание. Изначально список объетов такой: Код: java 1.
И на выходе нужно мапу формата вида: Код: java 1.
Я пока сделал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Оно работает. Но минусов много - как минимум 2 раза бежим по одной коллекции. Ну и может как-то это можно оптимизировать и сделать по другому? Спасибо! @mayton Как я понимаю, это н совсем группировка ведь, разве нет? В идеале, повторюсь, хочется обойтись за 1 раз коллекцию. Формат входных и выходных данных, думаю, ясен. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 20:46 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot, собеседование что-ли проходишь? Тогда попробуй напиши эту функцию через обычный цикл на Pure-Java. В 1 проход. Потом мы попробуем его привести к форме работы со стримами. Но так хоть будет некая устойчивая точка которая работает. Надо будет написать свою функцию для reduce или collect. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 20:58 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
ahmaroot ahmaroot Друзья, прошу прощения. Я немного не так сформулировал описание. Изначально список объетов такой: Код: java 1.
И на выходе нужно мапу формата вида: Код: java 1.
Я пока сделал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Оно работает. Но минусов много - как минимум 2 раза бежим по одной коллекции. Ну и может как-то это можно оптимизировать и сделать по другому? Спасибо! @mayton Как я понимаю, это н совсем группировка ведь, разве нет? В идеале, повторюсь, хочется обойтись за 1 раз коллекцию. Формат входных и выходных данных, думаю, ясен. В такой постановке это не группировка. Это итерация со стейтом(аккумулирование). Исторически самым первым решением такой задачи являлось внешнее итерирование в цикле for Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
На смену ему пришли стримы, которые содержат логику итерирования внутри себя, что есть шаг вперед Код: java 1. 2. 3. 4. 5. 6.
Но так как переменные sell и buy у нас мутабельные и могут утечь, усложняем концепцию дальше. Так как твоя операция на математическом языке ассоциативная и коммутативная то для нее всего то и надо что начальное значение и операция, которая должна выполниться над каждым элементом. Вторая часть уже есть, осталось дело за первой. Для этого введем класс-аккумулятор, который будет иммутабельный и на каждом проходе будет создаваться его модифицированная копия. Также стоит отметить что объект класса создается прямо в методе reduce и никуда утечь не может. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
В теории можно обойтись и без промежуточного класса и объекта accum, но код будет выглядеть громоздким(на Java) Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Еще больше можно абстрагировать логику вводя математическое понятие Monoid, это такая алгебраическая структура, которая имеет начальное значение некого типа и бинарную ассоциативную операцию, результатом которой будет элемент того же типа что и начальное значение. Это позволяет еще более абстрагировать и переиспользовать код, но это уже далеко за рамками ООП и java-новичка. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 21:39 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
Не дай бог еще собеседующий будет знать что такое моноиды, и абелевы группы и скажет - Ану-ка давай ка поговорим про это... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2020, 23:10 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
забыл ник [ Еще больше можно абстрагировать логику вводя математическое понятие Monoid, это такая алгебраическая структура, которая имеет начальное значение некого типа и бинарную ассоциативную операцию, результатом которой будет элемент того же типа что и начальное значение. Это позволяет еще более абстрагировать и переиспользовать код, но это уже далеко за рамками ООП и java-новичка. У вас по дороге цена потерялась :-) Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 05:43 |
|
Смена структуры списка
|
|||
---|---|---|---|
#18+
mad_nazgul, Прошу прощения. Одно сравнение лишнее. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2020, 05:45 |
|
|
start [/forum/topic.php?fid=59&msg=40012838&tid=2120638]: |
0ms |
get settings: |
20ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
284ms |
get tp. blocked users: |
2ms |
others: | 313ms |
total: | 710ms |
0 / 0 |