我试图将ArrayList的每个元素拆分成一个char并加倍并将结果推送到HashMap中。到目前为止,我的代码是:
public static int TotalAmount(ArrayList<String> x) {
HashMap<Character,Double> hm = new HashMap<Character,Double>();
for(int i = 0; i < x.size(); i++) {
String[] s = x.get(i).split("(?<=\\d)(?=[a-zA-Z])");
hm.put(s[1].charAt(0), Double.parseDouble(s[0]));;
}
我使用ArrayList保存:
234K
1.3M
2.1M
211H
11K
但是当我遍历HashMap时,我得到:
H, 211
K, 11
M, 2.1
我似乎无法找到我的逻辑出错的地方。我或许可以将此授权给我的HashMaps介绍。如何确保将String的ArrayList正确转换为HashMap?
为了清理,我试图将ArrayList完全移动到HashMap中,而不会在找到相同的密钥时进行覆盖。
答案 0 :(得分:0)
你可以试试这个:
public static HashMap<Character, List<Double>> TotalAmount(ArrayList<String> initialList) {
HashMap<Character, List<Double>> resultMap = new HashMap<>();
for (String line : initialList) {
Double size = Double.parseDouble(line.substring(0, line.length() - 1));
Character sizeChar = line.charAt(line.length() - 1);
if (resultMap.containsKey(sizeChar)) {
resultMap.get(sizeChar).add(size);
} else {
resultMap.put(sizeChar, Collections.singletonList(size));
}
}
return resultMap;
}
答案 1 :(得分:0)
试试这个!我测试过,它工作正常!正如QBrute所提到的,HashMap的 put()会覆盖之前使用相同键处理的任何值。
我使用HashMap创建了方法和测试(在main中)&gt;
import java.util.*;
public class Question {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("234K");
list.add("1.3M");
list.add("2.1M");
list.add("221H");
list.add("11K");
HashMap<Character, ArrayList<Double>> result = TotalAmount(list);
System.out.println("K: " + result.get('K'));
System.out.println("M: " + result.get('M'));
System.out.println("H: " + result.get('H'));
}
public static HashMap<Character, ArrayList<Double>> TotalAmount(
ArrayList<String> x) {
HashMap<Character, ArrayList<Double>> map = new HashMap<>();
for (String line : x) {
Double num = Double.parseDouble(line.substring(0,
line.length() - 1));
Character c = line.charAt(line.length() - 1);
if (map.containsKey(c)) {
map.get(c).add(num);
} else {
ArrayList<Double> newList = new ArrayList<>();
newList.add(num);
map.put(c, newList);
}
}
return map;
}
}