我在这个网站上读过很多关于Java 8和Collections的问题,鉴于我对java流的理解有限,我在尝试对这个Map进行排序时遇到了一些麻烦。 我的代码如下,是tradeList和ArrayList();
Map<String, Double> buyReport = tradeList.stream().filter(trade -> trade.getInstruction() == Instruction.BUY)
.sorted(Comparator.comparing(trade -> trade.getInstructionDate()))
.collect(Collectors.groupingBy(trade -> dateFormat.format(trade.getInstructionDate()),
Collectors.summingDouble(trade -> trade.getUSDAmount())));
在编写HashMap时包含.sorted()语句是否有意义?我试图创建一个LinkedHashmap,使用自定义比较器为我需要对象实例进行比较(一个Double),但无济于事。
我可以包含您认为有用的任何其他代码。
提前致谢!!
更新:最近尝试了这个;在按公司代码分组然后总结公司总数时仍然无法获得结果:
Map<String, Double> entityOutgoingReport = tradeList.stream()
.filter(trade -> trade.getInstruction() == Instruction.SELL)
.collect(Collectors.groupingBy(trade -> String.valueOf(trade.getEntity()),
LinkedHashMap::new,
Collectors.summingDouble(trade -> trade.getUSDAmount())));
for (String entity : entityOutgoingReport.keySet()) {
String key = entity;
String value = decFormat.format(entityOutgoingReport.get(entity));
tableBuilder.addRow(key, value); //Just pretty printing to console
}
答案 0 :(得分:0)
只需提供一个LinkedHashMap
,其中将插入结果,从而维持秩序。
.collect(Collectors.groupingBy(trade ->
dateFormat.format(trade.getInstructionDate()),
LinkedHashMap::new,
Collectors.summingDouble(trade -> trade.getUSDAmount())));
完整代码:
Map<String, Double> entityOutgoingReport =
tradeList.stream()
.filter(trade -> trade.getInstruction() == Instruction.SELL)
.sorted(Comparator.comparing(trade -> trade.getInstructionDate()))
.collect(Collectors.groupingBy(trade -> String.valueOf(trade.getEntity()),
LinkedHashMap::new,
Collectors.summingDouble(trade -> trade.getUSDAmount())));