2012-05-08 14 views
1

我相信这不是一个非常复杂的问题,但我相对较新的Java,一直困扰着这一段时间。Java ArrayList项目计数器即“Apple,3×香蕉,2×橙色”

说我有一个数组,其中包含6个字符串值,可以说他们是:[Apple, Banana, Banana, Banana, Orange, Orange]。我正在寻找建立一个方法,将采取此数组并返回一个字符串,在上面的情况下,为:"Apple, 3×Banana, 2×Orange"

我将不胜感激这一些帮助。我一直在尝试使用不同的技术来实现这一点,但是在数组的第一次迭代以及何时检测重复值等方面出现了正确的行为。

回答

4

使用Map<String, Integer>。遍历数组并将字符串作为Map键和计数器作为值:

Map<String, Integer> words = HashMap<String, Integer>(); 
for (String word : words) { 
    Integer count = words.get(word); 
    count = count == null ? 0 : count++; 
    words.put(word, count); 
} 

现在单词映射包含单词和其计数之间的映射。

1

您可以使用TreeMap对象,其中水果名称是关键字,值是它被看到的次数。

你用水果遍历数组水果,使用foreach循环并在TreeMap中更新水果的值。最后你打印密钥及其值。由于我们已经使用了TreeMap,所以按键将在排序顺序。

1

你有什么试过的?创建HashMap的实例,其中键是水果名称和值是水果的发生。遍历你的数组,在每次迭代时,向你的Map添加新的水果或增加现有密钥的出现次数。

然后在HashMap的迭代,并建立您的字符串

+1

看起来他希望他们按*排序*顺序排列,所以'HashMap'可能是错误的地图实现使用 – Bohemian

+0

在这种情况下,他可以使用TreeMap实现。无论如何,我不确定OP是否需要排序。你是 ? – Anton

+0

只要所有数据都存在且正确,订单就不是非常重要。 – JonnyIrving

1

如果一切是在一个ArrayList和你知道你期待,你可以使用

ArrayList<String> fruits = new ArrayList<>(); 
//load some fruit code [ .. ] 
int orangeOccurrences = Collections.frequency(fruits, "orange"); 

成果,但地图是明确的更正确的做法。

+0

谢谢Michail,2012年5月你在哪里!? :-) – JonnyIrving

+1

我很可能在名为“Noobness”的船上旅行:P –