在開發項目中遇到了這樣的一個問題:
一個repeatList裏面有這樣的數據:java
repeatList=[ {sort='0', company='A公司', value='28432'} {sort='0', company='A公司', value='8263685'} {sort='0', company='A公司', value='1234'} {sort='0', company='B公司', value='2234'} {sort='0', company='B公司', value='567'} {sort='0', company='C公司', value='85789'} ... ]
我要怎麼作才能把他們合併爲spa
list=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'} ]
這邊根據b字段的公司名將同一公司的不一樣數據構造一塊兒,作法以下:code
總結:雙重遍歷+去重blog
(1)雙重遍歷構造數據:ip
//存儲構造出來的list,list類型根據項目變化而變化,下面的問號都表示相關的類型,在這裏都是要一致的 List<?> oList = new ArrayList<>(); Map<String,List<?>> map = new HashedMap(); //第一層for遍歷 for(? input : repeatList){ List<?> list = map.get(input.getString("company")); if (list == null) { list = new ArrayList<>(); list.add(input); map.put(input.getString("company"), list); } for (? input2 : repeatList){ if(input.getString("company").equals(input2.getString("company")) && !list.contains(input2)){ list.add(input2); } } /*合併篩選出來的同類數據,new出一個用來暫時存儲遍歷的數據的, 定義在外面,而後for完以後再用oLsit進行add,就會出現同屬性名的值會被後面覆蓋,不一樣屬性名則補充添加, 因此company和sort就無需變屬性名,可是value就須要變化*/ ? mergePd = new ?(); //第二層for遍歷 for(? x : list){ mergePd.put("company", String.valueOf(x.get("company"))); mergePd.put("sort", String.valueOf(x.get("sort"))); //定義一個標誌,改變value的屬性名,達到區分的效果 String sign = 1; mergePd.put("value" + sign, String.valueOf(x.get(value))); sign ++; } oList.add(mergePd); }
通過上面的構造,會出現這樣的結果:開發
oList=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'} ]
(2)去重
由於是每條數據都遍歷了,因此會出現必定數量的重複,這時候就須要作去重的步驟,使用java的set方法便可,即在上面方法後面補上:get
//set去除outList裏面重複的數據,保證每條數據的惟一性 Set set = new HashSet(oList); oList = new ArrayList(set); List<?> outList; outList.addAll(oList);
(3)這時候的結果就是:input
outList=[ {sort='0', company='A公司', value1='28432' , value2='8263685',value3='1234'} {sort='0', company='B公司', value1='2234' , value2='567'} {sort='0', company='C公司', value1='85789'} ]
這就達到咱們想要的結果了it
但願個人分享可以幫到你們,如果以爲有用請賜一個贊!!!!class