将零从一个ArrayList添加到另一个

时间:2019-03-10 15:39:40

标签: java arraylist

package arrays;
import java.util.ArrayList;
import java.util.Scanner;

public class Arrays {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ArrayList<Integer> ary = new ArrayList<>();

        System.out.println("enter the size of the ary");
        int Arraysize = input.nextInt();         

        for (int i = 0; i< Arraysize; i++) {
            System.out.println("enter the element of the ary");
            ary.add(input.nextInt());
        }

        ArrayList<Integer> newAry = new ArrayList<>();    
        for (Integer num : ary) {
            if (ary.contains(0)) {
                newAry.add(0);  
            }
        }

        System.out.println(newAry);     
    }
}

我拥有的代码是每次循环时都添加零,而不检查ary具有零时应将newAry添加零的条件。

1 个答案:

答案 0 :(得分:0)

您正在检查数组contains是否为零,如果为true,则将添加0,循环将执行多次。

例如,如果列表只有一个零,则 条件ary.contains(0)对于循环的每次迭代始终为true,而newAry.add(0);语句将为每次迭代添加零。

您需要将代码更改为此:

for (Integer num : ary) {
      if (num.equals(0)) { //if the current Integer is 0 then add it
          newAry.add(num);
      }
}

或者,如果您使用的是 Java-8 ,则可以使用Stream.filter,以从原始List获得一个新的List并带有零。 Predicate到过滤器将检查当前元素是否为0,否则将被忽略:

 List<Integer> newAry = ary.stream().filter(num -> num.equals(0)).collect(Collectors.toList());

另一种方法是在 Java-9 中使用Collectors.filtering,但首选第一种方法:

 List<Integer> newAry = ary.stream().collect(Collectors.filtering(num -> num.equals(0), Collectors.toList()));

根据您的评论,通过更改原始列表来删除零,我们可以使用Collections.singleton删除所有出现的零:

ary.removeAll(Collections.singleton(0));

或者我们可以采用 Java-8 方式:

ary.removeIf(num -> num.equals(0));

如果我们希望在不更改原始列表的情况下使用非零元素,则可以在!操作中简单地使用filter

 List<Integer> newAry = ary.stream().filter(num -> !num.equals(0)).collect(Collectors.toList());

newAry将是一个新的List,其中仅过滤掉非零元素。