3 回答
TA貢獻1852條經驗 獲得超1個贊
對于基元,不要向 提供參數:int[]toArray()
in1 = Arrays.stream(in1).filter(x -> x != 0).toArray();
另請注意,您不再使用前綴,因為您已經定義了變量in1int[]in1
它的工作方式與另一個問題不同的原因是,Arrays.stream(int[]) 返回了 一個具有 toArray() 版本的版本,該版本返回一個 .IntStreamint[]
用
Arrays.stream(new String[]{"This","", "will", "", "", "work"})將調用數組流(T[] 數組),它:
返回以指定數組作為其源的順序。
Stream
或 .然后使用來自類將調用此版本,該版本接受 ,該版本會將其轉換為特定類型的 .(不接受來自任何參數的方法返回Stream<String>toArray()StreamIntFunctionArraytoArray()StreamObject[])
TA貢獻2036條經驗 獲得超8個贊
眾所周知,基元類型在java中不是對象,對于它們,類中有重載方法。假設這里只是考慮.如果我們通過,那么被調用并返回對象。如果你去看類,那么你會發現只有一個方法,它不接受任何參數。stream()Arraysintint[]stream(int[] array)IntStreamIntStreamtoArray
所以,我們不能做.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);
}在引用類型的情況下,泛型方法從類中被調用并產生,現在接口有兩個重載。如果我們使用streamArraysStream<T>StreamtoArray()
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;
}
添加回答
舉報
