【问题标题】:Java 8 frequency Object in array [duplicate]数组中的Java 8频率对象[重复]
【发布时间】:2015-06-09 14:31:10
【问题描述】:

我有一个Object[] array

我需要创建映射Map<Obejct, Integer>,其中Integer值包含数组中键对象的频率。

我如何使用Collectors 以java 8 风格做到这一点?

【问题讨论】:

  • 另外你需要确保你的对象正确实现了equals和hashcode。

标签: arrays object dictionary java-8 collectors


【解决方案1】:

你可以这样做(希望我没有任何错别字):

Map<Object,Long> map = Stream.of(array)
                                .collect(Collectors.groupingBy(o -> o,
                                                               Collectors.counting()));

这应该将数组的元素按相等分组并计算每组中的对象数。

【讨论】:

  • 请解释一下为什么 Object::equals 在这里是一个有效的函数?我无法理解一种感觉。
  • @Sloth 我错了。请参阅编辑后的答案。
  • counting() 返回一个 Long....
  • 表达式 o -> o 是否与 Function.identity() 相同?我使用 Function.identity() 作为函数,我的问题解决了。但是 o -> o 也可以。编辑:是的,它是一样的 =)
  • @Sloth 是的,我不记得 Function.identity() 的确切语法,这就是我没有在回答中使用它的原因。
猜你喜欢
  • 2020-10-11
  • 2016-12-23
  • 2021-05-13
  • 2019-12-27
  • 1970-01-01
  • 2023-03-10
  • 2021-04-23
  • 1970-01-01
  • 2017-02-25
相关资源
最近更新 更多