如何将ArrayUtils用于对象数组,它不会删除数组的内容

时间:2014-10-14 12:31:19

标签: java arrays

如何删除对象数组的内容。如果还有其他方法可以删除对象数组的内容,请分享。

import java.util.Arrays;
import java.util.Scanner;

import org.apache.commons.lang3.ArrayUtils;

public class Testing {

  public static void deleteItem(ItemTracker[] listItems) {
    System.out.println("Which item you want to delete? ");
    for(int i=0; i < listItems.length; i++) {
            if(input.equalsIgnoreCase("Quantity")) {
                // Some Code
            } else if(input.equalsIgnoreCase("Something"){
                ArrayUtils.remove(listItems, i); //  This is the part where it should delete .. but it doesnt delete. 
            } 
            break;
        }
      }
    }

6 个答案:

答案 0 :(得分:4)

更改此

ArrayUtils.remove(listItems, i);

listItems = ArrayUtils.remove(listItems, i);

正如您在JavaDoc中看到的,该方法不会更改参数listItems,而是返回包含其余元素的新数组。

修改

您还需要将删除方法更改为

public static ItemTracker[] deleteItem(ItemTracker[] listItems) {
    //..
}

所以你可以用剩下的元素返回新数组。

答案 1 :(得分:2)

存储生成的数组。

它不会更改原始数组对象。

listItems = ArrayUtils.remove(listItems, i);

编辑但是要使用此方法,您需要更改方法的返回类型

public static ItemTracker[] deleteItem(ItemTracker[] listItems){
    System.out.println("Which item you want to delete? ");
    for(int i=0; i < listItems.length; i++) {
            if(input.equalsIgnoreCase("Quantity")) {
                // Some Code
            } else if(input.equalsIgnoreCase("Something"){
                listItems = ArrayUtils.remove(listItems, i); //  This is the part where it should delete .. but it doesnt delete. 
            } 
            break;
        }
      return listItems;
      }

答案 2 :(得分:2)

在您的情况下,ArrayUtils的使用不正确且多余。您可以通过下一个方式删除元素:

// ...  
listItems[i] = null;
// array will looks like [o1, o2, null, o3, o4, ...]
// ...    

如果不改变方法的返回类型

,没有其他办法

答案 3 :(得分:1)

  

<强> ArrayUtils.remove

     

此方法返回一个 new array ,其中包含相同的输入元素   数组除了指定位置上的元素。组件类型   返回数组的值始终与输入数组的相同。

所以,你应该像这样使用它

listItems = ArrayUtils.remove(listItems, i);

<强>

  • 这里我们将返回的数组分配给当前listItem
  • 由于此方法不会更改实际数组,但在删除后返回已更改的数组,#replace方法适用于String
  

<强> 即可。我同意zvdh我错过了你的方法的目的   因为我更专注于去除元素。为此!    因为这实际上不会更改listItem,您需要return包含更改的新数组。

答案 4 :(得分:1)

没有额外的库,临时列表:

Element arrayToRemoveFrom[];
Element toRemove; // should be known already

ArrayList<Element> tmpList = new ArrayList<Element>(Arrays.asList(arrayToRemoveFrom));
tmpList.remove(toRemove);
// any other code processing and removing elements
arrayToRemoveFrom = tmpList.toArray(new Arrays[tmlList.size()]);

答案 5 :(得分:0)

class Arrays
{
    public static void main(String[] args)
    {
      double[] numbers = {6.0, 4.4, 1.9, 2.9, 3.4, 3.5};
      java.util.Arrays.sort(numbers);

      System.out.print("Ascending order= ");
      for (int i = 0; i < numbers.length; i++)
        System.out.print(numbers[i] + " ");

      System.out.println();

      System.out.print("Decending order= ");
      for (int i = numbers.length -1; i >= 0; i--)
        System.out.print(numbers[i] + " ");

     }

}

此解决方案仅以相反的顺序显示,但可以更改为使用相同的循环对数组重新排序。