【问题标题】: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 列在列表中怎么办?还是将其映射到日期流并使用好的集合工厂将其收集到集合?

标签: java java-stream


【解决方案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());

【讨论】:

  • 恕我直言,这是一个更好的解决方案,因为迭代顺序可能是相关的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
相关资源
最近更新 更多