Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 数组列表删除_Java_Arraylist - Fatal编程技术网

Java 数组列表删除

Java 数组列表删除,java,arraylist,Java,Arraylist,需要使用ArrayList的方法,您可以使用contains,而不用担心自己编写内部循环 此外,在迭代时从列表中删除元素也很棘手。因此,既然您没有修改列表,而且似乎希望返回一个列表,那么只需创建一个新列表并添加而不是删除 public static ArrayList<ArrayList<Integer>> removeTheNumber(ArrayList<ArrayList<Integer>> n , Integer p){ ArrayLi

需要使用ArrayList的方法,您可以使用contains,而不用担心自己编写内部循环

此外,在迭代时从列表中删除元素也很棘手。因此,既然您没有修改列表,而且似乎希望返回一个列表,那么只需创建一个新列表并添加而不是删除

public static ArrayList<ArrayList<Integer>> removeTheNumber(ArrayList<ArrayList<Integer>> n , Integer p){
  ArrayList<ArrayList<Integer>> a = new ArrayList<>();

  for(int i=0; i < n.size(); i++){
      ArrayList<Integer> innerList = n.get(i);
      if (!innerList.contains(p)) a.add(innerList);
    }

  return a;
}
让我们假装你有

ArrayList<ArrayList<Integer>> myArrayList = [[1,2,3],[7,5],[4,4,2],[8,12,3]];
for (int i = 0; i < myArrayList.length; i++) {
 //...
}

如果要使用两个循环,可以这样编写,其中array是输入数组,toSearch是整数:

    ArrayList<ArrayList<Integer>> arrayToReturn = new ArrayList<>();

    for(ArrayList<Integer> listInner : array){
        boolean found = false;
        for(Integer elem : listInner) {
            if (elem == toSearch)
                found=true;
        }
        if(found!=true)
            arrayToReturn.add(listInner);
    }

    arrayToReturn.stream().forEach(System.out::println);
当然,我建议使用java 8,然后您可以这样编写:

arrayToReturn = array.stream().filter(elem ->
!elem.contains(toSearch)).collect(
Collectors.toCollection(ArrayList<ArrayList<Integer>>::new));

        arrayToReturn.stream().forEach(System.out::println);

您可以使用内部列表的.contains进行检查,因为Integer类支持这一点。下面是一个函数及其测试

public ArrayList<ArrayList<Integer>> removeTheNumber(ArrayList<ArrayList<Integer>> lists, Integer n) {

    ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    for (ArrayList<Integer> list: lists ) {
        if (!list.contains(n))
            result.add(list);
    }

    return result;
}

@Test
public void testRemoveNumber() {
    ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
    lists.add(Lists.newArrayList(2,7,8));
    lists.add(Lists.newArrayList(6,7,9));
    lists.add(Lists.newArrayList(3,2,6));

    ArrayList<ArrayList<Integer>> result = removeTheNumber(lists, 2);

    Assert.assertArrayEquals(lists.get(1).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{}));
    result = removeTheNumber(lists, 7);
    Assert.assertArrayEquals(lists.get(2).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{}));
    result = removeTheNumber(lists, 6);
    Assert.assertArrayEquals(lists.get(0).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{}));
}

jpublic ArrayList<ArrayList<Integer>> removeTheNumber(ArrayList<ArrayList<Integer>> lists, Integer n) { ArrayList<ArrayList<Integer>> result = new ArrayList<>(); for (ArrayList<Integer> list: lists ) { if (!list.contains(n)) result.add(list); } return result; } @Test public void testRemoveNumber() { ArrayList<ArrayList<Integer>> lists = new ArrayList<>(); lists.add(Lists.newArrayList(2,7,8)); lists.add(Lists.newArrayList(6,7,9)); lists.add(Lists.newArrayList(3,2,6)); ArrayList<ArrayList<Integer>> result = removeTheNumber(lists, 2); Assert.assertArrayEquals(lists.get(1).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{})); result = removeTheNumber(lists, 7); Assert.assertArrayEquals(lists.get(2).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{})); result = removeTheNumber(lists, 6); Assert.assertArrayEquals(lists.get(0).toArray(new Integer[]{}), result.get(0).toArray(new Integer[]{})); }