【发布时间】:2017-05-26 10:49:42
【问题描述】:
您好,我有一个列表,其中的数据如下所示
[{"month":"April","day":"Friday","count":5},
{"month":"April","day":"Monday","count":6},
{"month":"April","day":"Saturday","count":2},
{"month":"April","day":"Sunday","count":1},
{"month":"April","day":"Thursday","count":7},
{"month":"April","day":"Tuesday","count":8},
{"month":"April","day":"Wednesday","count":10},
{"month":"March","day":"Friday","count":3},
{"month":"March","day":"Monday","count":2},
{"month":"March","day":"Saturday","count":15},
{"month":"March","day":"Sunday","count":11},
{"month":"March","day":"Thursday","count":4},
{"month":"March","day":"Tuesday","count":20},
{"month":"March","day":"Wednesday","count":7},
{"month":"May","day":"Friday","count":2},
{"month":"May","day":"Monday","count":0},
{"month":"May","day":"Saturday","count":7},
{"month":"May","day":"Sunday","count":4},
{"month":"May","day":"Thursday","count":8},
{"month":"May","day":"Tuesday","count":3},
{"month":"May","day":"Wednesday","count":6}]
我的对象类是
String month;
String day;
Integer count;
我想通过使用流得到的是按月分组的计数总和以及该月最大计数的日期。
所以最终结果看起来像
4 月 39 日星期三 三月,星期二,62 五月,星期四,30
我一直在尝试使用流和分组,但没有运气。任何帮助表示赞赏。谢谢
编辑
Map<String, Integer> totalMap = transactions.stream().collect(Collectors.groupingBy(MonthlyTransaction::getMonth, Collectors.summingInt(MonthlyTransaction::getCount)));
Map<String, String> maxMap = transactions.stream().collect(Collectors.groupingBy(MonthlyTransaction::getMonth)).values().stream().toMap(Object::getDay, Collextions.max(Object::getCount);
显然maxMap方法是错误的,但我不知道怎么写。
【问题讨论】:
-
你能展示一些你的尝试吗?
-
我设法得到了总和,但我正在努力用当月的最大计数来映射这一天。下面是我现在拥有的代码。 transactions.stream().collect(Collectors.groupingBy(Object::getMonth, Collectors.summingInt(Object::getCount)));
-
月份和日期在您的列表中是唯一的吗?如果我看一下预期的结果,四月的其他日子在哪里?我不明白这个商业案例。
-
月份和日期是独一无二的。在预期的结果中,4 月共有 39 个计数,而周三的计数最多
-
请将填充数据的代码发布到列表变量中...
标签: java sum max grouping java-stream