从流分组中获取唯一日期列表
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
获取日期,将流distinct
和collect
列在列表中怎么办?还是将其映射到日期流并使用好的集合工厂将其收集到集合?
【参考方案1】:
如果您有Map<Integer,LocalDate>
中的数据,您可以使用values()
并收集到Set
以消除重复
Set<LocalDate> dates = txs.values().stream().collect(Collectors.toSet())
或使用HashSet
new HashSet<>(txs.values());
【讨论】:
如果您有Map<Integer, LocalDate>
中的数据,您可以使用new HashSet<>(txs.values())
。不需要流。【参考方案2】:
groupingBy
不是您的最佳选择。请改用distinct
。它会自动过滤掉所有重复项。
txs.stream().map(g -> g.getDate()).distinct().collect(Collectors.toList());
【讨论】:
恕我直言,这是一个更好的解决方案,因为迭代顺序可能是相关的。以上是关于从流分组中获取唯一日期列表的主要内容,如果未能解决你的问题,请参考以下文章
在 bigquery Standard sql 中按问题分组,并且无法获取唯一记录