private long longSum(Map<String, Long> valMap) {
        if(valMap == null) return 0L;
        long returnVal = 0L;
        Collection<Long> vals = valMap.values();
        for (Long val : vals) {
            returnVal += val;
        }
        return returnVal;
    }
    
    private long doubleSum(Map<String, Long> valMap) {
        if(valMap == null) return 0L;
        long returnVal = 0L;
        Collection<Long> vals = valMap.values();
        for (Long val : vals) {
            returnVal += val;
        }
        return returnVal;
    }上面的代码有什么可以改进的? 或者有什么第三方工具类? 如果是一种不同的数据类型,比如int,double,long,需要写不同的算数方法,觉得这样怪怪的,如果和抽象一下?

解决方案 »

  1.   

    使用泛型,直接上代码:
    public static void main(String[] args) {
            Map<String, Integer> map1 = new HashMap<>();
            map1.put("a1", 1);
            map1.put("a2", 4);
            map1.put("a3", 5);        Map<String, Double> map2 = new HashMap<>();
            map2.put("a1", 5.5);
            map2.put("a2", 6.4);
            map2.put("a3", 8.1);        Map<String, Long> map3 = new HashMap<>();
            map3.put("a1", 5L);
            map3.put("a2", 6L);
            map3.put("a3", 19L);        double sum1 = sum(map1);
            double sum2 = sum(map2);
            double sum3 = sum(map3);        System.out.println(sum1);
            System.out.println(sum2);
            System.out.println(sum3);
        }    private static double sum(Map<String, ?> valMap) {
            if (valMap == null || valMap.isEmpty()) {
                return 0;
            }
            double returnVal = 0;
            for (Object val : valMap.values()) {
                if (val == null) {
                    continue;
                }
                returnVal += Double.valueOf(val.toString());
            }
            return returnVal;
        }