【发布时间】: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来自您的模型吗?我只看到String和Doubles。顺便说一句,如果您找到一种操作日期的方法,您可以使用 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.00和28-Dec-20 Jore 81.67两行已在您所需/预期的输出中汇总到28-Dec-20 Jore 384.67中,而名为Jomon的两行尚未加在一起。 -
这能回答你的问题吗? Group by multiple field names in java 8