如何从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);
}
}