【问题标题】:Transforming a Stream in a HashMap with condition使用条件转换 HashMap 中的流
【发布时间】:2023-03-11 05:52:01
【问题描述】:

我对 java 8 很陌生。我正在尝试从其中包含 showNames 的流创建一个 HashMap。我的问题是名称可以重复并且它们可以出现多次,这意味着它们必须映射到同一个键上,我在映射后尝试使用过滤器,但我不确定要放置什么条件。 x->x.equals(x)? 流 showNames 的样子:

LOTR,路西法,绝命毒师,LOTR,驱魔人,教父,The 教父、路西法等

哈希映射的键应该是节目名称,值是字符串在流中出现的次数

【问题讨论】:

标签: java filter java-8 hashmap java-stream


【解决方案1】:

你想要的实际上是分组:

Map<String, Long> result = yourList.stream()
              .collect(Collectors.groupingBy(
                 Function.identity(), 
                 Collectors.counting()))

【讨论】:

  • @HadiJ .. 字符串出现在流中的次数作为值
  • 使用Collectors.summingInt(e-&gt;1) 代替Collectors.counting()
  • 请记住,这是一个 HashMap 仅按实现细节。它理论上可以更改为任何其他地图实现。因此,如果 HashMap 是唯一合适的结构,您可能希望明确。
  • @HadiJ 这是一个非常小的性能改进(除非你能看出瓶颈在那里,否则我不会改变它)。此外,counting 对于初学者来说更惯用且更易于阅读
  • @HadiJ 正是我在评论中所说的......如果你升级到 java-9,这已经修复了。我会坚持counting
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多