将字符串的ArrayList推入HashMap

时间:2017-10-09 16:42:42

标签: java arraylist hashmap

我试图将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中,而不会在找到相同的密钥时进行覆盖。

2 个答案:

答案 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;
}
}