|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Со ссылкой на Хабр. Подсчёт слов по шаблонам BigData и фреймворком Spark. https://habrahabr.ru/company/piter/blog/276675/ Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.02.2016, 15:16 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Копаю stream() в данный момент. Стало интересно можно ли решить подобную задачу: Допустим есть некая сущность Entity, у нее есть свои поля, id, entityId, список версий и булен флаг active. Код: 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.
Допустим есть сервис, в котором мне возвращается список таких энтитис(ну допустим из базы). Поля версии в этом списке не заполнены. Код: 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.
Мне надо сгруппировать их таким образом - создать лист ентитис, в котором будут содержаться только активные, НО все неактивные для данного entitiesId должны попасть в список versions для активной сущности. Вот как это делается для java < 8 Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Можно ли это переписать красивее или оптимальнее на java 8 использую stream()? Полный пример тут - Код: 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. 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.
Ваш вариант метода groupByVersionJava8? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 13:26 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:35 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, Никакой особой магии тут не получится реализовать. Всё то же самое: Код: java 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:47 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Usman, Сначала отсортировать надо по e.active, иначе будет NPE ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 14:49 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczзабыл ник, Никакой особой магии тут не получится реализовать. Всё то же самое: Код: java 1. 2. 3. 4. 5. 6.
Ага, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Думаю что можно сделать проще, но с полным перебором для поиска по id, вместо HashMap. Ещё можно развить идею Usman, отсортировать по active и entityId, чтобы затем схлопнуть в одну итерацию. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 15:20 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Посоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 16:51 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
slaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:01 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
BlazkowiczslaymskПосоветуйте, с чего стоит начинать изучение Джава? При базовом знании HTML и CSS С английского языка. Если с ним всё в норме, то бери официальный Java Tutorial. слишком категорично, хотя, в целом, я поддерживаю ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:24 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
slaymsk, на ютубе полно видеороликов ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:27 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Красиво не будет. Но вот однострочник, например: Код: java 1. 2. 3. 4. 5.
Единственное что пришлось добавить builder style setter Код: java 1. 2. 3. 4.
Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 17:31 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник, ну как-то так: Код: 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.
геттер для entityId сделаете и из мапы значения достанете сами ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 18:37 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
fixxerзабыл ник, ну как-то так: Код: 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.
геттер для entityId сделаете и из мапы значения достанете сами Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 21:41 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowiczзабыл никАга, вот и я как не крутил, так и не смог в один проход(красиво) сделать:) Красиво не будет. Но вот однострочник, например: Код: java 1. 2. 3. 4. 5.
Единственное что пришлось добавить builder style setter Код: java 1. 2. 3. 4.
Ну, и код подразумевает обязательное наличие одной активной сущности для каждого id. Да, активная будет 100%. Интересно, а я вот и так и сяк групинг пробовал - но так ничего и не получилось. Вроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 21:43 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никfixxer Код: 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.
Класс обертка не подходит по ряду причин, к сожалению. В основном из-за кривого юая, именно за этим и такой изврат с версиями, потому что на юай только одно новое поле обработать) Вы не поняли. Мутабельная обертка используется только для свертки, на входе и выходе все та же Entity. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2016, 22:21 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл никВроде как и красиво все с этими стримами, но не интуитивно, надо обомозговать хорошо, в отличие от императивного стиля, взял да и заколбасил по ходу движения) А никто не обещает серебряной пули. Просто ещё один вариант. Нужно выбрать тот что проще и его реализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 09:13 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Дальше идёт моё сугубо личное ИМХО. Новое - хорошо забытое старое. Давайте почитаем как определяет Streams документация по Scala Цитирую http://www.scala-lang.org/docu/files/collections-api/collections_14.html A Stream is like a list except that its elements are computed lazily. Because of this, a stream can be infinitely long. Only those elements requested are computed. Otherwise, streams have the same performance characteristics as lists. Обратите внимание на lazy computing. Еще цитата из JDK 8 https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html Laziness-seeking. Many stream operations, such as filtering, mapping, or duplicate removal, can be implemented lazily, exposing opportunities for optimization. For example, "find the first String with three consecutive vowels" need not examine all the input strings. Stream operations are divided into intermediate (Stream-producing) operations and terminal (value- or side-effect-producing) operations. Intermediate operations are always lazy. Я не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года. В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 11:28 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonЯ не помню где и когда были анонсированы ленивые вычисления. С точки зрения ФП им уже 100 лет в обед. Историю создания Scala я не знаю но wiki пишет что с 2003 года. В 2003 году был переход с J2SE 1.4 на J2SE 5. Никаких java.util.Stream еще не было. Не очень понял к чему этот экскурс в историю. Подавляющее большинство концепций в программировании были описаны ещё в 70-х. В том числе ленивые вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 11:40 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
К тому что стримы в Java нужно было вводить еще лет 10 назад. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:00 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
maytonК тому что стримы в Java нужно было вводить еще лет 10 назад. Люди, которые думали так же и реализовали Scala. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 12:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Вот так и старик Бьярне. Сидит в своих кедах, закинув ноги на стол и думает. Внести ли в новую спеку С++ то о чём долго говорят большевики.... ? Или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 14:33 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Не могу больше найти ссылку. На прошлой неделе видел её в Java дайджесте на dou.ua. Там был отличный вопрос "как реализовать такое на стримах", на который, кажется Getz ответил. Но позже твит, вроде удалили. Как раз там пример близкий к этому топику о том как не надо писать в функциональном стиле на Java. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 14:52 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
Blazkowicz Код: java 1. 2. 3. 4. 5.
Написал тест, у этого кода есть один косяк. Он будет работать только если обьявить versions как Set. Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Понятнее говоря, после выполнения в версиях будет две версии с id=2 и одна с айди =3 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:10 |
|
Java 8 - уже не совсем Java?
|
|||
---|---|---|---|
#18+
забыл ник Дело в том, что в setVersions() будет передаваться каждая группа. Простейший случай - 3 энтити(айди по порядку), первая активная. Тогда сначала в версии добавится id=2, а потом id=2 и id=3. Тут фигню написал, поставил брейкпоинт в setVersions, почему то туда сразу 3 entites пришло, две из них с одинаковым айди. Дебажить stream тоже то еще удовольствие:) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2016, 16:18 |
|
|
start [/forum/topic.php?fid=59&msg=39168360&tid=2120495]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 413ms |
0 / 0 |