说我有一个地图(myMap)的字符串和对象-地图
如何在myMap中获得K. name每次出现的次数并将其存储在新地图中?新地图将显示K. Name作为键,其值将是它在myMap中出现的次数
使用流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)
));
首先,将类的名称更改为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表达式,但我的代码遇到了一个问题。