2012-05-08 15 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 –