例如,假设我有ArrayList
可能包含以下值:
x
x
x
y
y
现在我要检索的是x
和x
的数量,我希望能够区分我拥有的x
或y
因为实际上,我可以在ArrayList中有任何对象,我必须能够区分它们。
我想要做的是首先将ArrayList
转换为LinkedHashSet
,这将保留排序并删除重复项,以便我只有x
和{{1}但是我如何获得每个的数量并将其与正确的元素相关联?
总的来说,我想做的是能够编写一个y
方法,让我输出:
toString
但不知道x3y2
和x
是元素,因为它们可能是y
或z
之类的其他内容。
答案 0 :(得分:5)
查看google guava中的Multiset:http://docs.guava-libraries.googlecode.com/git-history/v11.0.2/javadoc/com/google/common/collect/Multiset.html
示例:
Multiset<String> strings = HashMultiset.create(arrayList);
int countX = strings.count("x"); // the count of x
可以在Guava wiki上找到更多示例。
答案 1 :(得分:2)
您要做的是使用HashMap<Object, Long>
。将Object存储为键,将Long存储为出现次数。
这里有一些伪代码可以做你想做的事。
for(x in list) {
if(x in Map) {
map.put(x, map.get(x)++);
} else {
map.put(x, 1);
}
}
然后,您可以遍历Map并打印值和出现次数。我会让你写那个。这很容易。
答案 2 :(得分:0)
嗯,为此你可以做的是从最后遍历list
。保留一个计数器并继续检查对象的变化。一旦检测到更改,请使用current position + 1
替换计数器中的数字。这样做直到你到达第一个位置。