Java - 有关如何删除满足特定条件的元素的建议?

时间:2018-02-18 17:24:17

标签: java

我试图从数组中删除小于0或大于250的某些元素。我已经读过有关arrayUtils.removeElement的内容,但它似乎无法正常工作(ArrayUtils)无法解决)。对我可以使用的任何建议?

这些是导入的库:

import java.io.*;
import java.util.*;
import java.lang.*;

public static void dataCleaning() {
  readFile();
  int[] heights = readFile();
  int[] myArray[];
  for (int i = 0; i < heights.length; i++) {
    if (heights[i] > 250 || heights[i] < 0) {
      ArrayUtils.removeElement(heights, heights[i]);
    }
  }
}

3 个答案:

答案 0 :(得分:6)

一,你应该只调用readFile一次。不要读它两次扔掉第一个。其次,您可以使用IntStreamfilter要保留的值并删除要忽略的值(在构建新数组之前 - 我不会删除循环中的元素,数组有固定大小 - 因此每个操作都会创建一个新数组)。

相反,我会这样做,

public static void dataCleaning() {
    int[] heights = readFile();
    int[] myArray = IntStream.of(heights).filter(x -> x >= 0 && x <= 250).toArray();
}

答案 1 :(得分:1)

此处ArrayUtils是由apache(commons-lang)提供的库,您可以使用java.util.Arraysjava.util.stream.*

int[] newArray = Arrays.stream(heights).filter(x -> x >= 0 && x <= 250).toArray();

答案 2 :(得分:0)

您可以创建另一个数组来存储新元素.LIKE:

   public static void dataCleaning(){
       int[] heights = readFile();
       int[] myArray;

       int[] newArray;
       int newArrayIndex=0;
       for (int i = 0; i < heights.length; i++) {
            if (heights[i] > 250 || heights[i] < 0) {
                newArray[newArrayIndex]=heights[i];
                newArrayIndex++;
            }
       }
   }

编辑: 或者你可以编辑高度数组,也可以用newArrayIndex代替newArray。