假设我创建一个数组,设置值如下:
double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0};
如何从数组中删除所有0.0
,只留下10.0和3.0并将数组长度缩短为2?
此网站上的其他问题涉及HashSets
或Collections
。有没有办法没有导入其他东西?
答案 0 :(得分:7)
这是一个使用可以完成工作的流的单行:
exampleArray = Arrays.stream(exampleArray).filter(d -> d != 0.0).toArray();
答案 1 :(得分:2)
这只是使用int数据类型的示例。它可以根据您的需要进行更改。
说明:
j是一个计数器变量,用于通过从创建新数组中排除非零索引并将所有非零索引复制到新数组来调整newArray
的大小。我们这样做是因为数组长度在java中是不可变的。因此,在尝试调整数组大小时,必须创建一个新数组并进行复制。当需要大小可变性时,这是使用其他数据结构的好处。
int j = 0;
for( int i=0; i<array.length; i++ ){
if (array[i] != 0)
array[j++] = array[i];
}
int [] newArray = new int[j];
System.arraycopy( array, 0, newArray, 0, j );
答案 2 :(得分:0)
希望此代码可以帮助您。这是最基本的(不是最好的)方法:
double[] exampleArray = {10.0, 3.0, 0.0, 0.0, 0.0};
double numberToErase = 0.0; //This could be a parameter
int newArraySize = 0;
//Get the fixed size of the new Array
for (double n : exampleArray) {
if (n != numberToErase) {
newArraySize++;
}
}
//Create the new array
double[] newArray = new double[newArraySize];
int newArrayCurrentIndex = 0;
for (double n : exampleArray) {
if (n != numberToErase) {
newArray[newArrayCurrentIndex++] = n;
}
}
//Check the result
for (double n : newArray) {
System.out.println("Number: " + n);
}