在多个ArrayLists中拆分ArrayList,其中值相同

时间:2015-03-23 12:47:45

标签: java android sorting arraylist

我坚持这一点。

我试图制作排序功能是什么。

parentarraylist = [1,1,1,2,3,2,3,3,2,2,1];
*magic*
childarraylist1 = [1,1,1,1];
childarraylist2 = [2,2,2,2];
childarraylist3 = [3,3,3];

神奇的部分是我陷入困境的地方。

我试过把它放在for循环(父节点)并检查值。像这样

int i = 0;
int finder = 0;
ArrayList<int> initArray = new ArrayList();
for(int list : parentarraylist){
    if(i == 0){
        finder = list
    }
    if(finder == list){
           initArray.add(list);
           parentarraylist.remove(list);
    }else{
        new ArrayList *value of list* =  new ArrayList(); 
        finder = list;
        *value of list*.add(list);
    }
}

这会导致视图错误 java.util.ConcurrentModificationException 并且我无法设置列表的

我该怎么做才能使这项工作?

3 个答案:

答案 0 :(得分:2)

这个小片段可以帮助您实现目标:

//maps will hold ALL unique integer as it's key
HashMap<Integer, ArrayList<Integer>> maps = new HashMap<Integer, ArrayList<Integer>>();

//your initial array, written inline for clarity
ArrayList<Integer> parentarraylist = new ArrayList<Integer>(Arrays.asList( new Integer[] {1,1,1,2,3,2,3,3,2,2,1}));

//get the iterator so that we won't need another temporary int variable for loop
Iterator<Integer> iterator = parentarraylist.iterator();
while(iterator.hasNext()){
    //next = current integer in our array
    Integer next = iterator.next();

    //check if we have already have current integer or not
    if(!maps.containsKey(next)){
        //we don't have it, initialise an arraylist for this specific integer
        ArrayList<Integer> x = new ArrayList<Integer>();
        x.add(next);

        //put it to our map holder
        maps.put(next, x);
    } else {
        //already have it, add directly
        maps.get(next).add(next);
    }
}

此代码将打印如下内容:

printMap(maps);
//1 = [1, 1, 1, 1]
//2 = [2, 2, 2, 2]
//3 = [3, 3, 3]
  

printMap()取自这个答案:Iterate through a HashMap

public static void printMap(Map mp) {
   Iterator it = mp.entrySet().iterator();
   while (it.hasNext()) {
       Map.Entry pair = (Map.Entry)it.next();
       System.out.println(pair.getKey() + " = " + pair.getValue());
       it.remove(); // avoids a ConcurrentModificationException
   }
}

答案 1 :(得分:1)

您可以尝试这样的事情:

public static void main(String[] args) {
        ArrayList<Integer> parent = new ArrayList<Integer>();
        ArrayList<ArrayList<Integer>> results = new ArrayList<ArrayList<Integer>>();
        parent.add(3);
        parent.add(1);
        parent.add(1);
        parent.add(2);
        parent.add(3);
        parent.add(3);
        parent.add(1);

        for(int i : parent)
        {
            boolean check = false;
            for(ArrayList<Integer> result : results)
            {
                if(result.size() > 0)
                {
                    if(result.get(0) == i)
                    {
                        check = true;
                        result.add(i);
                        break;
                    }
                }
            }
            if(!check)
            {
                ArrayList<Integer> temp = new ArrayList<Integer>();
                temp.add(i);
                results.add(temp);
            }
        }

        for(ArrayList<Integer> i : results)
        {
            for(int j : i)
            {
                System.out.print("" + j);
            }
            System.out.println();
        }
    }

输出:

333
111 
2

答案 2 :(得分:0)

问题是您从正在迭代的数组中删除了一个元素。在

parentArrayList.remove(list);

导致错误。如果删除此行,您的程序将起作用。目前我没有看到从parentArrayList中删除项目的好处,因为你只需要删除它,你就可以了。