|
|
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Как преобразовать данный код в Java 8 stream Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. у меня получилось вот так, но это как то совсем не то, да и не работает Код: java 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 13:36 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Kopranych, у тебя был превосходный код. Его надо было разбить на 2 процедуры которые работают с коллекциями. Это в лучших традициях рефакторинга. А ты из него сделал нечитабельную фигню. Зачем тулить Streams везде где ни попадя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 13:47 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
mayton, можешь на примере показать рефакторинг моего кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 14:05 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
До того как мы начнем. Я спрошу вопрос. Ты суммы денег всегда считаешь в double? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 14:10 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
И еще один вопрос. Читал ли ты книгу Кея Хостмана - Java SE 8 базовый курс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 14:17 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Kopranych, нужно взять stocks, опционально отфильтровать их по секторам, а потом сложить: Код: java 1. после чего затащить суммы в сектора ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 14:31 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
maytonИ еще один вопрос. Читал ли ты книгу Кея Хостмана - Java SE 8 базовый курс? Нет эту книгу не читал, обязательно начну! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 15:04 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
KopranychmaytonИ еще один вопрос. Читал ли ты книгу Кея Хостмана - Java SE 8 базовый курс? Нет эту книгу не читал, обязательно начну! Тогда проще. С любезного разрешения господина Хорстмана я сделаю цитату. Java SE 8 базовый курс - Глава 82. Потоковые операции не изменяют их источник. Например метод filter() не удаляет элементы из нового потока данных но выдает новый поток в котором они отсутствуют. Я прокомментирую. Корни этого пункта уходят в функционально программирование. В частности такие методы как map/fold/reduce изначально не имеют отношения к Java. Их разные вариации были в Scala, Haskell и прочих языках которые очень аккуратно относятся к функциям и к purity. Поэтому такой фрагмент кода Код: java 1. нарушает правило номер 2. К каким последствиям это приведёт для твоего кода? Скорее всего ни к каким но в целом для парадигмы Streams данное поведения я-бы счел нежелательным. Это такой себе Stream-smell. И на code-review он бы вызвал вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 16:05 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Kopranychmayton, можешь на примере показать рефакторинг моего кода? По поводу рефакторинга. Я готов попробовать "развалить" твой волшебный метод на два метода. Убежден что после этого мы хотя-бы понизим комплексность. Но ты поставил меня в сложное положение. Мне придётся самому создать такие сущности как Sector и Stock. Мне это делать лень поэтому я прошу тебя привести кусок кода с этими зависимостями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 16:08 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
mayton, вот класс Sector Код: java 1. 2. 3. 4. 5. 6. класс Stock Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 16:46 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Kopranych, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 17:11 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Андрей Панфилов, Спасибо за решение! А еще говорят, что функциональное программирование более проще читается, по мне так мой вариант в обычном стиле более проще в понимании ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 17:20 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
KopranychА еще говорят, что функциональное программирование более проще читается, по мне так мой вариант в обычном стиле более проще в понимании Так и есть, просто код приведенный выше далек от функционального программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2018, 21:02 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
авторА еще говорят, что функциональное программирование более да потому что это JAVA-корявые языковые конструкции пиши в SCALA и всё будет красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 01:02 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
забыл никKopranychА еще говорят, что функциональное программирование более проще читается, по мне так мой вариант в обычном стиле более проще в понимании Так и есть, просто код приведенный выше далек от функционального программирования всё больше убеждаюсь что у каждого свой взгляд на понятие функционального программирования )) по мне так это дичь само по себе которая толком пока не выстрелила (и не факт что выстрелит вообще) ну и джава для фп так себе подходит. слишком архаична. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 11:51 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Cheblin, косность языковых конструкций java там не самая большая проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 12:00 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
andreykaTвсё больше убеждаюсь что у каждого свой взгляд на понятие функционального программирования )) Отнюдь, когда начинаешь в нем разбираться, основные принципы кристаллизуются в мозгу и по ним особых разногласий ни у кого нет andreykaTпо мне так это дичь само по себе которая толком пока не выстрелила (и не факт что выстрелит вообще) ну и джава для фп так себе подходит. слишком архаична. Ну это частая проблема - делать суждения в темах, которых не особо разбираешься. В конкретном коде во время итерирования, объект Sector изменяется, одно это уже мимо ФП, не говоря о том, что зачем-то обновляется еще и сторонний объект(allocationSector.getAllocations().add(sector);) Так что не стоит удивляться говну на выходе. По поводу того что джава не подходит для фп - соглашусь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 12:06 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
andreykaTзабыл никпропущено... Так и есть, просто код приведенный выше далек от функционального программирования всё больше убеждаюсь что у каждого свой взгляд на понятие функционального программирования )) по мне так это дичь само по себе которая толком пока не выстрелила (и не факт что выстрелит вообще) ну и джава для фп так себе подходит. слишком архаична. Если сравнить иерархию типов Scala c структурой примитивных типов и базовых классов Java то начнёшь ощущать эдакую лёгкую зависть к scala. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 12:33 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Я понимаю о чем ты говоришь. и да, я и не претендую на то что уже получил ФП головного мозга. У меня пока скорее ООП ГМ. вот всё стараюсь, но практически применить или развить навыки пока особо негде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 12:34 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
andreykaTЯ понимаю о чем ты говоришь. и да, я и не претендую на то что уже получил ФП головного мозга. У меня пока скорее ООП ГМ. вот всё стараюсь, но практически применить или развить навыки пока особо негде. Аналогично. У меня тоже нету продуктовых задач где юзается ФП. Поэтому для меня ФП - пока только хобби. Правда был опыт интенсивного юзания XML/XPath и в хвост и в гриву. Но там такое ФП. Весьма специфичное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 13:24 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
andreykaTЯ понимаю о чем ты говоришь. и да, я и не претендую на то что уже получил ФП головного мозга. У меня пока скорее ООП ГМ. вот всё стараюсь, но практически применить или развить навыки пока особо негде. Самое смешное, что ООП и ФП подходы это просто разные Church Encodings одного и того же, просто взгляд с разных углов. Прочитать можно тут - https://underscore.io/blog/posts/2017/06/02/uniting-church-and-state.html Большинство принципов ФП есть хороший тон и в ООП(иммутабельность, pure functions, referential transaprense и тд), просто ФП позволяет довольно четко отделить мух от котлет, а ООП позволяет вольности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 13:36 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Используя C# LINQ данный код можно было записать в один statement. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 15:53 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
cossack5Используя C# LINQ данный код можно было записать в один statement. Давай ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2018, 16:15 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
maytoncossack5Используя C# LINQ данный код можно было записать в один statement. Давай Вроде так (если ничего не упустил): Код: c# 1. 2. 3. 4. 5. Весь код Код: c# 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 23:23 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Хм... даже не знаю. По идее мне должен нравится псевдо-SQL-ный вариант. Но код Панфилова кажется более clear с точки зрения ресурсов. Тоесть я понимаю что там примерно под капотом и какие накладные расходы. А этот Линк. Как он делает JOINS ? Он должен вовлекать в работу искусственные структуры данных чтобы JOIN отработал успешно. А если секторов и стоков будет в сто-крат больше? Как он себя поведет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2018, 23:37 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
mayton, В данной случае - это LINQ To Objects. Согласно сорцам Join'а и и основного файла с linq-логикой создается что-то вроде мапы для каждой итерации верхнего уровня (т.е. sectors). Наверное, не самый эффективный вариант (а чего вы хотели - чудес не бывает). Я в джаве использовал cqengine , где для полей объектов можно создавать индексы (хеш-индексы, префиксное дерево и т.д.) и это работает быстрее (думаю в . NET тоже такое есть). бенчмарк linq vs non-linq Код: c# 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. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. Summary BenchmarkDotNet=v0.11.1, OS=Windows 10.0.17134.285 (1803/April2018Update/Redstone4) Intel Core i7-7700HQ CPU 2.80GHz (Max: 2.81GHz) (Kaby Lake), 1 CPU, 8 logical and 4 physical cores [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3163.0 QuickJob : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 64bit RyuJIT-v4.7.3163.0 Job=QuickJob InvocationCount=10 IterationCount=5 LaunchCount=1 UnrollFactor=1 WarmupCount=1 Method | NumStocks | NumSectors | Mean | Error | StdDev | Rank | ------------------- |---------- |----------- |-----------:|-----------:|-----------:|-----:| performUsingLINQ | 100000 | 10 | 20.334 ms | 2.905 ms | 0.7544 ms | 3 | performUsingOneCycle| 100000 | 10 | 5.963 ms | 4.608 ms | 1.1969 ms | 1 | performUsingLINQ | 100000 | 100 | 20.963 ms | 2.486 ms | 0.6457 ms | 3 | performUsingOneCycle| 100000 | 100 | 5.789 ms | 4.384 ms | 1.1387 ms | 1 | performUsingLINQ | 100000 | 1000 | 27.998 ms | 2.094 ms | 0.5439 ms | 4 | performUsingOneCycle | 100000 | 1000 | 6.645 ms | 4.694 ms | 1.2193 ms | 1 | performUsingLINQ | 100000 | 10000 | 78.585 ms | 5.072 ms | 1.3175 ms | 5 | performUsingOneCycle| 100000 | 10000 | 11.994 ms | 8.442 ms | 2.1927 ms | 2 | performUsingLINQ | 1000000 | 10 | 206.446 ms | 13.331 ms | 3.4626 ms | 7 | performUsingOneCycle| 1000000 | 10 | 65.255 ms | 50.348 ms | 13.0776 ms | 5 | performUsingLINQ | 1000000 | 100 | 244.823 ms | 57.552 ms | 14.9488 ms | 8 | performUsingOneCycle| 1000000 | 100 | 55.222 ms | 36.442 ms | 9.4656 ms | 5 | performUsingLINQ | 1000000 | 1000 | 318.040 ms | 20.250 ms | 5.2598 ms | 9 | performUsingOneCycle| 1000000 | 1000 | 68.306 ms | 44.328 ms | 11.5140 ms | 5 | performUsingLINQ | 1000000 | 10000 | 632.400 ms | 109.849 ms | 28.5328 ms | 10 | performUsingOneCycle| 1000000 | 10000 | 100.853 ms | 41.869 ms | 10.8753 ms | 6 | Как видно из таблицы, правильный алгоритм (как в примере Панфилова - когда хешмапа создается один раз в самом начале) будет где-то в 6 раз быстрее чем LINQ с джойнами. Код TC с вложенными итерациями, приведенный в начале темы будет в сотни раз медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2018, 03:38 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
KopranychАндрей Панфилов, Спасибо за решение! А еще говорят, что функциональное программирование более проще читается, по мне так мой вариант в обычном стиле более проще в понимании Во всём нужны мера. Где-то одно хорошо, где-то другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2018, 15:37 |
|
||
|
Преобразование вложенных циклов в Java 8 stream
|
|||
|---|---|---|---|
|
#18+
Kopranych, Streams & Reactive Programming https://codecraft.tv/courses/angular/reactive-programming-with-rxjs/streams-and-reactive-programming/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2018, 15:39 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2121749]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 268ms |
| total: | 525ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...