列表到地图,用键作为第一个字母和值作为第一个字母对应的关键字
我有一个List,例如。 {猫,球,蝙蝠,杯子,添加,蚂蚁},我试图转换成地图与密钥作为列表的单词中可用的第一个字符,并将值作为列表中的相应单词。列表到地图,用键作为第一个字母和值作为第一个字母对应的关键字
即
A->添加,蚂蚁
B->球,蝙蝠
C->猫,杯
的地图输出。如果我能得到一些指导,这将是很有帮助的。
使用Map<Character, List<String>>
其中关键的是性格和价值是由该字符的所有单词列表。
添加字符时,您必须重新注册'A'和'a'是不同的关键。
为了得到第一个字符
-
如果 'A' 和 'a' 视为不同然后
键= <字符串> .charAt(0)
-
如果 'A'和'a'一样对待
key = <字符串> .toUppe rCase()的charAt(0)
如果只有在列表中的话,以较低的情况下,开始这应该工作。
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;
}
为什么我们需要单词[i] .toCharArray(),因为我们只需要第一个字符就有一个名为charAt(index)的函数。 –
没有想到这一点,你是对的...我会编辑它 – htz
但仍然insted调用字[i] .charAt(0)再次您可以使用温度字符。你能否使用2 for循环来计算你的代码的复杂性?如果你移动map.put(“”+ words [i] .charAt(0),wordList);在for循环之外。 –
您可以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。
使用纯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塔库尔建议
只是想知道为什么你选择键作为字符串,因为我们可以选择字符作为键 –
当然,字符也可以用作键,你是对的 – shevchyk
你尝试什么吗?你有什么问题? –
是否有任何以大写字母开头的单词? – htz