当前位置: 首页 > 知识库问答 >
问题:

如何在hashmap中获得每个唯一值的总计数?

呼延骏俊
2023-03-14

说我有一个地图(myMap)的字符串和对象-地图

如何在myMap中获得K. name每次出现的次数并将其存储在新地图中?新地图将显示K. Name作为键,其值将是它在myMap中出现的次数

共有2个答案

傅和璧
2023-03-14

使用流API从输入映射的值中获取流

Map<String, K> inputMap = getData(); // some input data

Map<String, Long> nameFrequencyMap = inputMap.values() // Collection<K>
    .stream()
    .collect(Collectors.groupingBy(
        K::getName,
        Collectors.counting()
    ));

// or use another summingInt collector if integer result is desired
Map<String, Integer> nameFrequencyIntMap = inputMap.values() // Collection<K>
    .stream()
    .collect(Collectors.groupingBy(
        K::getName,
        Collectors.summingInt(k -> 1)
    ));
阳德润
2023-03-14

首先,将类的名称更改为K以外的名称。该字母通常用作map"key"的缩写。因此K作为map中的值是令人困惑的。让我们使用Person来代替。

record Person ( String name, LocalDate date , int age ) {}

定义并填充您的地图。

Map< String , Person > map = … ;

从映射中收集所有值,所有Person对象。

Collection< Person > personsMapped = map.values() ; 

获取地图中作为值的个人对象的独特列表。

List< Person > personsDistinct = map.values().stream().distinct().toList() ;

为生成的计数定义一个映射。

Map< Person , Integer > results = new HashMap<>() ;

对于这些不同的人中的每一个,搜索值的集合来计算发生次数。

for( Person person : personsDistinct ) {
    int count = personsMapped.filter( p -> p.equals( person ) ).count() ;
    results.put( person , count ) ;
} 

同样,如果您想按人名映射结果,请使用姓名作为键。但是要小心相同名称中的数据冲突。如果名称不唯一,按名称映射将失败。

Map< String , Integer > results = new HashMap<>() ;

for( Person person : personsDistinct ) {
    int count = personsMapped.filter( p -> p.equals( person ) ).count() ;
    results.put( person.name() , count ) ;
} 

或者您的目标是计算名称在Person对象中出现的次数,您期望这些对象的名称巧合地相同。

List< String > namesDistinct = map.values().stream().map( Person :: name ).distinct().toList() ;
Map< String , Integer > results = new HashMap<>();
for ( String nameDistinct : namesDistinct ) {
    int count = map.values().filter( p -> p.name().equals( nameDistinct ) ).count() ;
    results.put( nameDistinct , count ) ;
}
 类似资料:
  • 问题内容: 假设我的表包含以下内容: 每次通过while循环。我想获取价格值的总和,但ID中的每个不同值仅获取一次 因此,以上述示例为例,我将得到类似以下内容的信息: 补充一下,我可能偶然发现了类似的帖子。问题是其他职位使用Oracle,另一方面我正在使用MySQL。 问题答案: 你需要和

  • 问题内容: 我已经做了很多关于溢出和谷歌的环顾工作,但是对于我的具体情况,结果都不起作用。 我有一个名为$ holder的占位符数组,值如下: 我正在尝试从此多维数组中提取不同/唯一的值。我想要的最终结果是一个包含(13,121)的变量,或者是(最好是)一个如下数组:Array([0] => 13 [1] => 121) 再次,我尝试了序列化等,但是当在每个数组中使用单个键进行操作时,我不太了解它

  • 问题内容: 我正在尝试使用数组来过滤并在列表中显示信息。为此,我使用了inbuild 方法。 但是我遇到了错误。 这是我的尝试(我通过过滤) 现场演示 问题答案: AngularJS 默认不包含过滤器。您可以使用angular- filter中的 那个。只包含JavaScript 并在您的应用中添加依赖项: 您的代码应立即生效!我编辑了您的Plunker,使其正常工作。

  • 问题内容: 我搜索了这个问题,但找不到任何有用的答案。我想获取文档中每个单词的总数,例如,我的索引中有一些推文,并且有一条推文中写着这样的内容:“这里太无聊了,我想去我的家,甜蜜的家”。查询应返回如下响应: 有可能这样做吗? 问题答案: 您正在寻找利用分析仪的。这样做时,您可以定义所需的任何分析器,即阻止分析器将单词转换为根/普通形式。查看文档以获取更多详细信息。 在: 出:

  • 问题内容: 如何获得数组中唯一值的列表?我是否总是必须使用第二个数组,或者是否有类似于JavaScript中Java哈希表的东西? 我将仅使用 JavaScript 和 jQuery 。不能使用其他库。 问题答案: 由于我在@Rocket答案的注释中继续进行了讨论,因此我不妨提供一个不使用任何库的示例。这需要两个新的原型函数,并且 为了提高可靠性,可以用MDN的垫片代替,并检查每个元素的值是否等于

  • 我最近开始学习流和Lambda表达式,但我的代码遇到了一个问题。