Java Stream分组和计数事件

时间:2019-04-10 17:11:44

标签: java java-stream

我有一个代表市场交易对象的列表。每笔交易都有一个打开和关闭的时间并有利润。我想按一个月对它们进行分组,然后计算每个月的利润> 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())));

1 个答案:

答案 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的利润归类为“亏损”。