我有一个代表市场交易对象的列表。每笔交易都有一个打开和关闭的时间并有利润。我想按一个月对它们进行分组,然后计算每个月的利润> 0且<0的交易数量=创建具有以下结构的地图{“ MM” = {“ Win” = numberOfWinTrades,“ Loss” = numberOfLossTrades} ,“ MM” ...}
我想到了以下代码,但无法在其中实现条件:
filteredOrders.stream().collect(Collectors.groupingBy(order -> order.getCreationTime().substring(5,7),
Collectors.groupingBy(order -> order.getPlUsd() > 0, Collectors.counting())));
答案 0 :(得分:3)
您可以基于order.getPlUsd() > 0
/ order.getPlUsd() < 0
条件使用内联映射:
Map<String, Map<String, Long>> monthPlusdGroups =
filteredOrders.stream()
.collect(Collectors.groupingBy(order -> order.getCreationTime().substring(5, 7),
Collectors.groupingBy(order -> order.getPlusd() > 0 ? "Win" : "Loss",
Collectors.counting())));
请注意,此实现(order.getPlusd() > 0 ? "Win" : "Loss"
)将$ 0的利润归类为“亏损”。