3 回答
TA贡献1852条经验 获得超1个赞
对于基元,不要向 提供参数:int[]
toArray()
in1 = Arrays.stream(in1).filter(x -> x != 0).toArray();
另请注意,您不再使用前缀,因为您已经定义了变量in1
int[]
in1
它的工作方式与另一个问题不同的原因是,Arrays.stream(int[])
返回了 一个具有 toArray()
版本的版本,该版本返回一个 .IntStream
int[]
用
Arrays.stream(new String[]{"This","", "will", "", "", "work"})
将调用数组流(T[] 数组),
它:
返回以指定数组作为其源的顺序。
Stream
或 .然后使用来自类将调用此版本,该版本接受 ,该版本会将其转换为特定类型的 .(不接受来自任何参数的方法返回Stream<String>
toArray()
Stream
IntFunction
Array
toArray()
Stream
Object[]
)
TA贡献2036条经验 获得超8个赞
众所周知,基元类型在java中不是对象,对于它们,类中有重载方法。假设这里只是考虑.如果我们通过,那么被调用并返回对象。如果你去看类,那么你会发现只有一个方法,它不接受任何参数。stream()
Arrays
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();
但是对于任何引用类型数组,我们可以转换为特定类型。例如
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); }
在引用类型的情况下,泛型方法从类中被调用并产生,现在接口有两个重载。如果我们使用stream
Arrays
Stream<T>
Stream
toArray()
toArray()
然后屈服,在这种情况下我们需要种姓。Object[]
toArray(IntFunction<A[]> 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); } }
}
TA贡献1784条经验 获得超8个赞
这可能不是你会发现的最好的版本,但是:
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;
}
添加回答
举报