使用List<Map>或者List<entityObject>计算指定属性的总和

来源:互联网 发布:mysql 连接127.0.0.1 编辑:程序博客网 时间:2024/06/06 11:48

上班时间偷个闲,回想自己在写项目的时候用到的大神之作,后进行改编,哈哈,好高大上的感觉。
实现代码:

@SuppressWarnings({ "unchecked" })    private static<T> void totalScore(List<T> srouce, String totalScore, String... keys){        if(CollectionUtils.isNotEmpty(srouce) && keys.length != 0){            for(T t : srouce){                int total = 0;                if(t instanceof Map){                    Map<String, String > srouceData = (Map<String, String>)t;                    for(String key : keys){                        total += Float.parseFloat(srouceData.get(key));                    }                    srouceData.put(totalScore, String.valueOf(total));                }else{                    //使用实体类对象的时候,属性必须是public                    try {                        for(String key : keys){                            String score = t.getClass().getField(key).get(t).toString();                            total += Float.parseFloat(score);                        }                        t.getClass().getField(totalScore).set(t, String.valueOf(total));                    } catch (Exception e) {                        e.printStackTrace();                    }                }            }        }    }

里边的内容要根据实际情况改变,代码不是万能,抄袭别人的也不是完全符合,所以就想一些简单的例子去实现它,理解它。
例子:

public static <T> void main(String[] args) {//      eg1:        List<Map<String, String>> dd = new ArrayList<>();        Map<String, String> map = new HashMap<>();        map.put("a", "1");        map.put("b", "2");        map.put("c", "3");        map.put("d", "n");        dd.add(map);        totalScore(dd, "d", new String[]{"a","b","c"});        System.out.println(dd);        //结果:[{a=1, b=2, c=3, d=6}]//      eg2:        List<Sd> sd = new ArrayList<>();        Sd sds = new Sd("2", "3");        sd.add(sds);        totalScore(sd, "sd", new String[]{"s","d"});        System.out.println(sd);//      结果:[Sd [s=2, d=3, sd=5]]    }

用到的实体:

class Sd{    public String s;    public String d;    public String sd;    public Sd(String s, String d) {        super();        this.s = s;        this.d = d;    }    public String getS() {        return s;    }    public void setS(String s) {        this.s = s;    }    public String getD() {        return d;    }    public void setD(String d) {        this.d = d;    }    public String getSd() {        return sd;    }    public void setSd(String sd) {        this.sd = sd;    }    @Override    public String toString() {        return "Sd [s=" + s + ", d=" + d + ", sd=" + sd + "]";    }}

哈哈哈,,这样就完美了。
没想到这种想法可以用到很多的地方;虚心学习……

原创粉丝点击