从流分组中获取唯一日期列表

Posted

技术标签:

【中文标题】从流分组中获取唯一日期列表【英文标题】:get a list of unique date from the stream grouping 【发布时间】:2022-01-23 19:11:29 【问题描述】:

我有数据:

id|date
1 |12-12-2021
2 |12-12-2021
3 |13-12-2021

想要获取日期列表:["12-12-2021", "13-12-2021"]

使用流,我可以得到一张地图:

txs.stream().collect(Collectors.groupingBy(g -> g.getDate()));

我想从上面的流中转换为列表。

【问题讨论】:

如果您使用map 获取日期,将流distinctcollect 列在列表中怎么办?还是将其映射到日期流并使用好的集合工厂将其收集到集合? 【参考方案1】:

如果您有Map<Integer,LocalDate> 中的数据,您可以使用values() 并收集到Set 以消除重复

Set<LocalDate> dates = txs.values().stream().collect(Collectors.toSet())

或使用HashSet

new HashSet<>(txs.values());

【讨论】:

如果您有Map&lt;Integer, LocalDate&gt; 中的数据,您可以使用new HashSet&lt;&gt;(txs.values())。不需要流。【参考方案2】:

groupingBy 不是您的最佳选择。请改用distinct。它会自动过滤掉所有重复项。

txs.stream().map(g -> g.getDate()).distinct().collect(Collectors.toList());

【讨论】:

恕我直言,这是一个更好的解决方案,因为迭代顺序可能是相关的。

以上是关于从流分组中获取唯一日期列表的主要内容,如果未能解决你的问题,请参考以下文章

列表视图按日期分组 Dart

Pandas:以列表形式按列分组的每个日期的频率

当日期不唯一时,在熊猫中按日期分组后计数观察值

在 bigquery Standard sql 中按问题分组,并且无法获取唯一记录

如何获取设置列表,其中设置应按 Hibernate.find() 中的 ID 分组

Linq 高级分组 + 计数到新模型