|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
Доброго дня ... Честное слово несколько раз читал про stream map collerctors и т.д. ни х не понял как это использовать на казалось бы простом примере ... select org_id,region_id,sum(minPrice),sum(minPrice),sum(bitand(amask,2)/2),sum(bitand(amask,4)/4) from tbl group by org_id,region_id уже есть заполненный public static class SOrgPrice { public Integer ware_id; public Integer org_id; public Integer region_id; public BigDecimal minPrice; public BigDecimal maxPrice; public Integer amask; public Integer getOrg () { return org_id; } public Integer getRegion () { return region_id; } public Integer getBitAmask (int bit) { return (amask&bit)/bit; } public BigDecimal getMinPrice () { return minPrice; } public BigDecimal getMaxPrice () { return maxPrice; } } public ArrayList<SOrgPrice> opData; Надо заполнить public static class SOrgSum { public Integer org_id; public Integer region_id; public BigDecimal sumMinPrice; public BigDecimal sumMaxPrice; public Integer deliveryCount; public Integer reservCount; } public ArrayList<SOrgSum> opSum; ----------------------- opSum = (ArrayList)opData.stream().collect(Collectors.groupingBy(SOrgPrice::getOrg,Collectors.groupingBy(SOrgPrice::getRegion))) .entrySet().stream() .collect(Collectors.toMap(x -> { Integer deliveryCount = x.getValue().stream().mapToInt(SOrgPrice::getBitAmask,2).sum(); Integer reserveCount = x.getValue().stream().mapToInt(SOrgPrice::getBitAmask,4).sum(); BigDecimal sumMinPrice = x.getValue().stream().mapToInt(SOrgPrice::getMinPrice).sum(); BigDecimal sumMaxPrice = x.getValue().stream().mapToInt(SOrgPrice::getMaxPrice).sum(); return new SOrgLD(x.getOrg(), x.getRegion(), sumMinPrice, sumMaxPrice, deliveryCount, reserveCount); }, Map(a -> a.getValue()))); !!!!!!!!!!!!! тут ошибка ... что тут писать? и вообще может где то раньше я ошибся PS: Переходим с SQL на Java (Ignite) ... все мозги сломал ... как было раньше просто на SQL select org_id,region_id,sum(minPrice),sum(minPrice),sum(bitand(amask,2)/2),sum(bitand(amask,4)/4) from tbl group by org_id,region_id ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 17:12 |
|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
_Drive_ PS: Переходим с SQL на Java (Ignite) ... все мозги сломал ... как было раньше просто на SQL Почему не на spark? В теории можно было бы оставить sql-подобный синтаксис. P/S - врядли кто-то будет комментировать неформатированный код ... |
|||
:
Нравится:
Не нравится:
|
|||
07.07.2020, 17:25 |
|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
Zzz79, вот что типа того Код: 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.
PS: Раньше в SQL это все решалось временными таблицами, но в Ignite их нет .. а создавать псевдо-временные и заполнять их уходит ОЧЕНЬ много времени ... |
|||
:
Нравится:
Не нравится:
|
|||
08.07.2020, 11:33 |
|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
_Drive_, Неужели я задал слишком трудный вопрос? можно проще .. как одним (двумя) операторами java stream реализовать select F1,F2,sum(f3),min(F4) from PMyTable group by F1,F2; где PMyTable это public class SMyTable { Integer F1; Integer F2; Integer F3; Integer F4; } public ArrayList<SMyTable> PMyTable; PS: как ЭТО сделать через for или foreach более менее понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 11:53 |
|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
_Drive_ Неужели я задал слишком трудный вопрос? нет, но нам лень за тебя строить трехэтажные стримы. в чем сложность забить в гугле "java stream calculate sum", "java stream calculate min", "java stream group" и посмотреть принцип на простых примерах? сразу говорю, что как-только начинаются всякие reduce и группировки, выходит многострочный монстр и ты сам, посмотрев на него спустя три месяца не поймешь, че за хня тут творится. поэтому я х.з. что такое ignite, но если можно, напиши лучше понятно и читаемо в процедурном стиле. имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 13:16 |
|
How to stream as select f1,f2,min(f3),sum(f4) from tbl group by f1,f2
|
|||
---|---|---|---|
#18+
_Drive_ Zzz79, вот что типа того Код: 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.
PS: Раньше в SQL это все решалось временными таблицами, но в Ignite их нет .. а создавать псевдо-временные и заполнять их уходит ОЧЕНЬ много времени а зачем ты ArrayList приводишь к ArrayList? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 13:37 |
|
|
start [/forum/topic.php?fid=59&msg=39979372&tid=2120744]: |
0ms |
get settings: |
4ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
30ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
130ms |
get tp. blocked users: |
0ms |
others: | 295ms |
total: | 470ms |
0 / 0 |