2013-07-23 90 views
0

我有一個List,例如。 {貓,球,蝙蝠,杯子,添加,螞蟻},我試圖轉換成地圖與密鑰作爲列表的單詞中可用的第一個字符,並將值作爲列表中的相應單詞。列表到地圖,用鍵作爲第一個字母和值作爲第一個字母對應的關鍵字

A->添加,螞蟻

B->球,蝙蝠

C->貓,杯

的地圖輸出。如果我能得到一些指導,這將是很有幫助的。

+0

你嘗試什麼嗎?你有什麼問題? –

+0

是否有任何以大寫字母開頭的單詞? – htz

回答

1

使用
Map<Character, List<String>>
其中關鍵的是性格和價值是由該字符的所有單詞列表。

添加字符時,您必須重新註冊'A'和'a'是不同的關鍵。
爲了得到第一個字符

  • 如果 'A' 和 'a' 視爲不同然後

    鍵= <字符串> .charAt(0)

  • 如果 'A'和'a'一樣對待

    key = <字符串> .toUppe rCase()的charAt(0)

-1

如果只有在列表中的話,以較低的情況下,開始這應該工作。

public static Map<String, List<String>> arrayToList(String[] words) { 
     Map<String, List<String>> map = new HashMap<String, List<String>>(); 
     for (int n = 97; n <= 122; n++) { 
      ArrayList<String> wordList = new ArrayList<String>(); 
      for (int i = 0; i < words.length; i++) { 
       if (words[i].charAt(0) == n) { 
        wordList.add(words[i]); 
        map.put("" + words[i].charAt(0), wordList); 
       } 
      } 
     } 
     return map; 
    } 
+0

爲什麼我們需要單詞[i] .toCharArray(),因爲我們只需要第一個字符就有一個名爲charAt(index)的函數。 –

+0

沒有想到這一點,你是對的...我會編輯它 – htz

+0

但仍然insted調用字[i] .charAt(0)再次您可以使用溫度字符。你能否使用2 for循環來計算你的代碼的複雜性?如果你移動map.put(「」+ words [i] .charAt(0),wordList);在for循環之外。 –

0

您可以use Map<String, List<String>>但我會建議使用

Multimap : Keys need not be unique.But same key can have same values

更妙的是

SetMultimap : Same as Multimap but no duplicate values for a given key. 
Duplicate keys are allowed. 

所有這些clases在谷歌guava library

Multimap<String, String> myMultimap = ArrayListMultimap.create(); 

    // Adding some key/value 
    myMultimap.put("a", "add"); 
    myMultimap.put("a", "ant"); 
    myMultimap.put("b", "ball"); 
    myMultimap.put("b", "bat"); 

執行探索在我上面提供的鏈接的API。

1

使用純Java:

List<String> words = 
    new ArrayList(Arrays.asList("cat", "ball", "bat", "cup", "add", "ant")); 
    Map<String, List<String>> map = new HashMap(); 
    for(String word: words){ 
     String firstChar = String.valueOf(word.charAt(0)); 
     if (map.get(firstChar) == null){ 
      map.put(firstChar, new ArrayList(Arrays.asList(word))); 
     } 
     else{ 
      map.get(firstChar).add(word); 
     } 
    } 

或更好的方式使用番石榴庫作爲Aniket塔庫爾建議

+0

只是想知道爲什麼你選擇鍵作爲字符串,因爲我們可以選擇字符作爲鍵 –

+0

當然,字符也可以用作鍵,你是對的 – shevchyk

相關問題