java構造list,合併重複的數組

在開發項目中遇到了這樣的一個問題:
一個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'}
]

clipboard.png

這邊根據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

相關文章
相關標籤/搜索