当前位置: 首页 > 知识库问答 >
问题:

Java流分组和计数占用

令狐宜民
2023-03-14

我有一个代表市场交易的对象列表。每一次交易都有一个开盘和收盘的时间,都有一个利润。我想按月份对它们进行分组,然后统计每个月中利润>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个答案

申浩广
2023-03-14

您可以使用基于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利润归类为“loss”。

 类似资料:
  • 我试图收集流,丢弃很少使用的项目,如本例所示: 我有一种感觉,可以做得简单得多 - 我是对的吗?

  • 问题内容: 我有一个看起来像这样的模型: 我想要为每个类别选择项目的计数(只是计数),因此在SQL中,它会像这样简单: 有没有相当于做这种“ Django方式”?还是纯SQL是唯一的选择?我熟悉Django中的count()方法,但是我看不出group by如何适合那里。 问题答案: 正如我刚刚发现的,这里是如何使用Django 1.1聚合API进行此操作:

  • 问题内容: 我第一次尝试使用Java 8流… 我有一个对象Bid,它表示用户对拍卖项目的出价。我有一个投标清单,我想制作一张地图,计算出用户投标的拍卖次数(不同)。 这是我的看法: 它有效,但是我感觉自己在作弊,因为我流式传输了地图的条目集,而不是在初始流上进行了操作……这一定是更正确的方法,但是我无法确定出来… 谢谢 问题答案: 您可以执行两次: 这样,您就可以确定每个用户在每次拍卖中有多少个出

  • 问题内容: 我有一个看起来像这样的数据框: 如何求和并计算,以得到一个看起来像这样的新数据框? 我知道如何求和 或 计数: 但不是两者都要做! 问题答案: 尝试这个: 或者如果您不想重置索引: 要么 演示:

  • 问题内容: 我尝试在Java 8流API中找到一种简单的方法来进行分组,我提出了这种复杂的方法! 感谢你的投入。 问题答案: 我认为你只是在寻找过载,它需要另一个负载来指定对每个组执行的操作…然后进行计数: 结果: (也有可能使用来提高效率。如果在你的上下文中安全的话,请记住你的真实代码。)

  • 我有一张清单,傻瓜 我想按类别分组,然后合计金额和价格。 现在我只需要用一个保存汇总的金额和价格的Foo对象替换String键。这就是我被困住的地方。我好像找不到办法。