gpt4 book ai didi

java - 计算 Hash> 中 List 中项目值的出现次数

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:29 25 4
gpt4 key购买 nike

我有一个散列结构hash_feat <String, List<String>>我的keysYears 并且里面的values 列表有不同术语的列表。

我的哈希值已经以某种方式存在,即来自特定 的所有项目都在该键的同一个列表中,例如:

<1997> <A,B,C,A,A,A,B,C,C,E>
<2003> <C,C,C,A,B,A,D,D,D,A>
<2004> <A,C,C,X,X,A,K,T,T,T>

我想对每个项目进行计数。对于 1997 A:4、B:2、C:3、E:1 等等,其他

我正在尝试想出这个来使用这个“计数”稍后显示在一个图中,我可以在其中可视化图表中每个项目的最高计数。这可能不是最聪明的方法,因此也欢迎任何建议。我的想法是在我的列表中包含每个项目的数量,以便我可以在其他方法中操作/使用。

谁有好的建议以聪明的方式做到这一点?

最佳答案

Eclipse Collections中有一个数据结构称为 BagMultimap这将适用于您的用例。以下是如何利用 MutableBagMultimap使用您的示例数据。

MutableBagMultimap<String, String> multimap = Multimaps.mutable.bag.empty();
multimap.putAll("1997", Lists.mutable.with("A","B","C","A","A","A","B","C","C","E"));
multimap.putAll("2003", Lists.mutable.with("C","C","C","A","B","A","D","D","D","A"));
multimap.putAll("2004", Lists.mutable.with("A","C","C","X","X","A","K","T","T","T"));

Assert.assertEquals(4, multimap.get("1997").occurrencesOf("A"));
Assert.assertEquals(2, multimap.get("1997").occurrencesOf("B"));
Assert.assertEquals(3, multimap.get("1997").occurrencesOf("C"));
Assert.assertEquals(1, multimap.get("1997").occurrencesOf("E"));

您可以简单地使用 forEachKeyMultivaluestoStringOfItemToCount 输出多重映射。

multimap.forEachKeyMultiValues((key, values) ->
System.out.println("<" + key + "> " + ((Bag<String>)values).toStringOfItemToCount()));

此代码显示以下内容:

<1997> {E=1, A=4, B=2, C=3}
<2004> {T=3, A=2, C=2, X=2, K=1}
<2003> {D=3, A=3, B=1, C=3}

或者您可以使用 forEachWithOccurrences 编写以下内容以控制输出。

multimap.forEachKey(key -> {
System.out.print(key + " ");
multimap.get(key).forEachWithOccurrences((value, occurrences) ->
System.out.print(value + ":" + occurrences + " "));
System.out.println();
});

此代码显示以下内容:

1997 E:1 A:4 B:2 C:3 
2004 T:3 A:2 C:2 X:2 K:1
2003 D:3 A:3 B:1 C:3

最后,如果您希望输出从出现次数最多的到最少的顺序排列,您可以使用 topOccurrences

multimap.forEachKey(key -> {
System.out.print(key + " ");
MutableBag<String> bag = multimap.get(key);
bag.topOccurrences(bag.sizeDistinct())
.each(pair ->
System.out.print(pair.getOne() + ":" + pair.getTwo() + " "));
System.out.println();
});

此代码显示以下内容:

1997 A:4 C:3 B:2 E:1 
2004 T:3 A:2 C:2 X:2 K:1
2003 D:3 A:3 C:3 B:1

注意:我是 Eclipse Collections 的提交者

关于java - 计算 Hash<String,List<String>> 中 List 中项目值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35687089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com