【问题标题】:Java HashMap filter between two dates [duplicate]两个日期之间的Java HashMap过滤器[重复]
【发布时间】:2021-11-04 08:15:07
【问题描述】:

我正在尝试在两个日期(区域设置日期)之间进行过滤或限制,但我不确定如何在下面的代码中执行此操作。

我的代码

        Map<String, Double> Total_IExpense = datatransaction.stream()
                .collect(groupingBy(TransactionData::getName,
                        Collectors.summingDouble(TransactionData::getAmount)));
Date        Name    Amount

04-Jan-21   Jomon   3,900.00
01-Jan-21   John    650.00
29-Dec-20   Priya   1,435.00
28-Dec-20   Jore    303.00
28-Dec-20   Jomon   453.74
28-Dec-20   Jore    81.67
26-Dec-20   John    25.12
21-Nov-20   Priya   118.38
21-Nov-20   Jomon   21.31
20-Nov-20   John    438.24
20-Nov-20   John    78.88
19-Nov-20   Jai 1,612.81
19-Nov-20   Priya   68.22

我需要过滤 - 20 年 11 月 21 日至 20 年 12 月 28 日和预期输出

Date        Name    Amount
21-Nov-20   Jomon   21.31
21-Nov-20   Priya   118.38
26-Dec-20   John    25.12
28-Dec-20   Jomon   453.74
28-Dec-20   Jore    384.67

【问题讨论】:

  • Date 来自您的模型吗?我只看到StringDoubles。顺便说一句,如果您找到一种操作日期的方法,您可以使用 LocalDate objetcs 中的预建比较函数过滤您的流
  • a LocalDate(假设这意味着“区域设置日期”)具有方法 isAfter()isBefore() 可以是 filter(...) 在您的 Stream 中的用户。 (如果仍然使用古老的java.util.Date 类,它有after()before()
  • 我不确定是什么阻止了你。这回答了你的问题了吗? Java: how do I check if a Date is within a certain range?
  • 您要按日期名称分组吗?在我看来,28-Dec-20 Jore 303.0028-Dec-20 Jore 81.67 两行已在您所需/预期的输出中汇总到 28-Dec-20 Jore 384.67 中,而名为 Jomon 的两行尚未加在一起。
  • 这能回答你的问题吗? Group by multiple field names in java 8

标签: java datetime hashmap


【解决方案1】:

我认为您应该根据 filter() 方法作为参数提供的 谓词(条件)过滤流。

如果您需要过滤字符串流并且只返回以'n'开头的字符串

strFlux.filter(s->s.startsWith("n")).log();

如果字符串的长度大于 4,则将其长度作为流的元素返回。

strFlux.filter(s -> s.length() > 4).map(s->s.length()).log(); //Now it will be a Flux<Integer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多