2013-07-23 89 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

相关问题