n个List<Map>合并,key值相等的value值相加

List<Map> maps1 =[{"bigtypes":100,"num":400},{"bigtypes":200,"num":300},{"bigtypes":400,"num":500},{"bigtypes":600,"num":500}]

List<Map> maps2 =[{"bigtypes":400,"num":720},{"bigtypes":500,"num":320},{"bigtypes":200,"num":120}]

List<Map> maps3 =[{"bigtypes":700,"num":120},{"bigtypes":500,"num":320},{"bigtypes":100,"num":510}]

目的为将  bigtypes 属性值相等 num属性值进行相加,bigtypes属性值不相等的List<Map>累加

将json数组循环赋值给  foodIntakeType

            List<TDiet> tDiets = dietApiService.getDietsByDate(userId, startDate, endDate);
            List<Map<String, String>> list = new ArrayList();
            List<Map<String, String>> newList = new ArrayList();
            int talls=0;
            if(tDiets.size()>0){
                int a=0;
                for(TDiet td:tDiets){
                    talls+=Integer.parseInt(td.getFoodIntakeMeasure());//摄入总量
                    a++;
                    String foodIntakeType =td.getFoodIntakeType();
                    org.json.JSONArray jsonArray = new org.json.JSONArray(foodIntakeType);
                    int iSize = jsonArray.length();
                    for (int i = 0; i < iSize; i++) {
                        org.json.JSONObject jsonObj = jsonArray.getJSONObject(i);
                        String bigtypes = jsonObj.get("bigtypes").toString();
                        String num = jsonObj.get("num").toString();
                        Map<String, String> maMap = new HashMap<String, String>();
                        maMap.put("bigtypes", bigtypes);
                        maMap.put("num", num);
                        if(a>1){//多组数据
                            newList=list;
                            Map<String,String> newMap =new HashMap<String, String>();
                            int b=0;
                            for (int j = 0; j < list.size(); j++) {
                                newMap= list.get(j);
                                if(bigtypes.equals(newMap.get("bigtypes").toString())){//key值相等的:value相加
                                    b++;
                                    newList.remove(j);
                                    Map<String, String> maMap2 = new HashMap<String, String>();
                                    maMap2.put("bigtypes", bigtypes);
                                    int xx= Integer.parseInt(newMap.get("num"))+Integer.parseInt(num);
                                    maMap2.put("num",xx+"" );
                                    newList.add(maMap2);
                                    break;
                                }
                            }
                            if(b==0){//key值与list<map>的map无共同key的:list新增
                                newList.add(maMap);
                            }
                            list= newList;
                        }else{//只有一组数据
                            list.add(maMap);
                        }
                    }

                }
                //取百分比
                newList=new ArrayList();
                for (int c = 0; c < list.size(); c++) {
                    Map<String,String> newMap2 =new HashMap<String, String>();
                    Map<String,String> oldmap=new HashMap<String, String>();
                    oldmap = list.get(c);
                    newMap2.put("bigtypes", oldmap.get("bigtypes"));
                    int aa= Integer.parseInt(oldmap.get("num"));
                    newMap2.put("num",towNumDivide(aa,talls)+"%");
                    newList.add(newMap2);
                }
                list=newList;
            }
时间: 2024-10-08 09:13:40

n个List<Map>合并,key值相等的value值相加的相关文章

在map中一个key中存多个值

一说到map都想到key-value键值队存在.key可以为最多一个null的key. 今天开发中一个业务需求,在map中一个key中存多个对象. 我首先想到Map<String,List>造型来解决.尤其是那种一对多的可以这么设计. Map<String,List> map = new HashMap<String,List>();//模型就是这么个. for(int i=0;i<listObj.size();i++){ key = listObj.getId(

c++ map按key或value的值分别进行排序

一.对key值进行特定的排序 map容器里面有两个值一个key一个是value,map<key,value>,其实map里面还有第三个参数,是一个类,用来对map的key进行排序的类,定义如下 template<class _Kty, class _Ty, class _Pr = less<_Kty>, class _Alloc = allocator<pair<const _Kty, _Ty> > > class map less<_Kt

Java Map按键(Key)排序和按值(Value)排序

Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value).1.按键排序jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序. Java代码   public class MapSortDemo { public static void main(Strin

Java集合篇六:Map中key值不可重复的测试

package com.test.collection; import java.util.HashMap; import java.util.Map; //Map中key值不可重复的测试 public class TestEquals { public static void main(String[] args) { String s1=new String("abc"); String s2=new String("abc"); Map map=new Has

STL map 按key值和按value值排序

map是用来存放<key, value>键值对的数据结构,能够非常方便高速的依据key查到对应的value. 假如存储水果和其单位价格.我们用map来进行存储就是个不错的选择. 我们这样定义.map<string, double>.当中水果用string类型.作为Key:该水果的单位价格用double类型,作为value. 这样一来,我们能够依据水果名高速的查找到价格. 我们不仅要将水果和相应的价格输出,还想知道依照价格高低进行排序的结果. 换句话说,我们希望可以对map进行按Ke

springboot中处理mybatis返回Map时key值的大小写

为了统一不同数据库返回key值大小写不一致的问题,特自定义ObjectWrapperFactory来做统一的处理 1,首先自定义MapWrapper /** * 将Map的key全部转换为小写 * */ public class MapKeyLowerWrapper extends MapWrapper { public MapKeyLowerWrapper(MetaObject metaObject, Map<String, Object> map) { super(metaObject,

C++基础之map按key排序

在项目当中有要用到map按key排序的需求,就在百度上搜了一下: typedef pair<int,int> PAIR; int cmp(const PAIR& x, const PAIR& y) { return x.second < y.second; } map<int,int> imgdis; //待排序对象,根据double值排序 imgdis[1] = 3; imgdis[10] = 1; imgdis[3] = 5; imgdis[12] = 4

各种Map的区别,想在Map放入自定义顺序的键值对

今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接

Map实现一个键对应多个值

方法:将多个值放在一个List中,然后把该List放在Map键所对应的值中. 原因:Map有点儿类似于Set,当中放的元素是不重复的,所以当放了第一个键所对应的值之后,又想放第二个还是这个键对应的另外一个值,就会覆盖掉               之前的值. 例子:定义一个Student类,属性:name 姓名,classNumber 班号,score 成绩      要求:通过班级号得到该班级所有学生的总分和班级平均分 Student类里面的代码比较简单就不发出来,重点看看Clazz类(班级)