如何从int数组(Java)中删除null元素?

如何从int数组(Java)中删除null元素?,java,arrays,int,java-stream,Java,Arrays,Int,Java Stream,我有一个包含元素0的int数组。我想删除这些元素并减小数组的大小 我在中阅读了String数组的示例,并将其应用于我的案例: int[] in1 = {0, 0, 2, 0, 3}; int[] in1 = Arrays.stream(in1).filter(x -> x != 0).toArray(int[]::new); 很遗憾,我收到一个错误: 类型IntStream中的方法toArray()不适用于参数(int[]::new) 我的问题是: 我怎样才能实现我的目标 为什么我不能像

我有一个包含元素
0
int
数组。我想删除这些元素并减小数组的大小

我在中阅读了
String
数组的示例,并将其应用于我的案例:

int[] in1 = {0, 0, 2, 0, 3};
int[] in1 = Arrays.stream(in1).filter(x -> x != 0).toArray(int[]::new);
很遗憾,我收到一个错误:

类型
IntStream
中的方法
toArray()
不适用于参数
(int[]::new)

我的问题是:

  • 我怎样才能实现我的目标
  • 为什么我不能像过滤字符串一样过滤我的
    int
    数组

  • 对于原语
    int[]
    不要向
    toArray()提供参数。

    还要注意的是,由于您已经在1中定义了变量
    ,因此不再使用
    int[]
    作为
    in1
    的前缀

    它的工作方式与另一个问题不同的原因是,它返回一个
    IntStream
    ,其版本返回一个
    int[]

    使用

    Arrays.stream(new String[]{"This","", "will", "", "", "work"})
    
    将致电:

    返回一个连续的
    ,其源为指定的数组


    。然后使用
    流中的
    toArray()
    调用version,它接受
    IntFunction
    ,将其转换为特定类型的
    数组。(不接受来自
    流的任何参数的
    toArray()
    方法返回一个
    对象[]

    这可能不是最好的版本,但是:

    private int[] removeZeros(int[] array, int toRemove)
        {
            int count = 0;
            int arrayLength = array.length;
    
            for (int i = 0; i < array.length; i++)
            {
                if (array[i] == toRemove)
                    count++;
            }
    
            int[] newArray = new int[arrayLength - count];
            int j = 0;
            for (int i = 0; i < array.length; i++)
            {
                if (array[i] != toRemove)
                {
                    newArray[j] = array[i];
                    j++;
                }
            }
            return newArray;
        }
    
    private int[]删除零(int[]数组,int-toRemove)
    {
    整数计数=0;
    int arrayLength=array.length;
    for(int i=0;i
    我们知道,基本类型在java中不是对象,因为它们在
    数组中有重载的
    stream()
    方法。假设这里只考虑<代码> int >代码>。如果我们通过调用
    int[]
    然后
    stream(int[]array)
    并返回
    IntStream
    对象。 如果您去查看
    IntStream
    类,那么您将只找到一个
    toArray
    方法,它不接受任何参数

    所以,我们不能做
    toArray(int[]::new)

    int[]in1={0,0,2,0,3};
    int[]in2=Arrays.stream(in1.filter(x->x!=0.toArray()

    但对于任何引用类型数组,我们都可以转换为特定类型。 e、 g

    在引用类型的情况下,从
    数组
    类调用一个泛型
    方法并生成
    ,现在
    接口有两个重载的
    toArray()
    。 如果我们使用

  • toArray()
    然后产生
    Object[]
    ,在这种情况下,我们需要种姓
  • toArray(IntFunction generator)
    然后给我们
    A[]
    ,其中
    A
    是任何参考类型
  • 参见下面的示例

    package test;
    import java.util.Arrays;
    public class EliminateZeroFromIntArray {
    public static void main(String[] args) {
    
        int[] in1 = {0, 0, 2, 0, 3};
        int[] in2 = Arrays.stream(in1).filter(x -> x != 0).toArray();
        for (int i : in2) {
            System.out.println(i);
        }
    
        String[] str = {"a","b",null,"c"};
        Object[] array = Arrays.stream(str).filter(i -> i !=null).toArray();
    
        for (Object object : array) {
            System.out.println((String)object);
        }
    
        String[] str2 = {"a","b",null,"c"};
        String[] strArr = Arrays.stream(str2).filter(i -> i !=null).toArray(String[]::new);
        for (String string : strArr) {
            System.out.println(string);
        }
    }
    
    }

    String[] str2 = {"a","b",null,"c"};
        String[] strArr = Arrays.stream(str2).filter(i -> !=null).toArray(String[]::new);
        for (String string : strArr) {
            System.out.println(string);
        }
    
    package test;
    import java.util.Arrays;
    public class EliminateZeroFromIntArray {
    public static void main(String[] args) {
    
        int[] in1 = {0, 0, 2, 0, 3};
        int[] in2 = Arrays.stream(in1).filter(x -> x != 0).toArray();
        for (int i : in2) {
            System.out.println(i);
        }
    
        String[] str = {"a","b",null,"c"};
        Object[] array = Arrays.stream(str).filter(i -> i !=null).toArray();
    
        for (Object object : array) {
            System.out.println((String)object);
        }
    
        String[] str2 = {"a","b",null,"c"};
        String[] strArr = Arrays.stream(str2).filter(i -> i !=null).toArray(String[]::new);
        for (String string : strArr) {
            System.out.println(string);
        }
    }