web-dev-qa-db-fra.com

Comment utiliser ArrayUtils pour un tableau d'objets, cela ne supprime pas le contenu d'un tableau

Comment supprimer le contenu d'un tableau d'objets. S'il existe d'autres moyens de supprimer le contenu d'un tableau d'objets, partagez-les. 

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;
        }
      }
    }
4
Naufal Yahaya

Change ça 

ArrayUtils.remove(listItems, i);

à

listItems = ArrayUtils.remove(listItems, i);

Comme vous pouvez le constater dans JavaDoc , la méthode ne modifie pas l'argument listItems, mais renvoie un nouveau tableau avec les éléments restants.

Modifier

Vous devez également changer votre méthode de suppression pour

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

Vous pouvez donc renvoyer le nouveau tableau avec les éléments restants.

3
Tom

Stocke le tableau résultant. 

Cela ne changera pas l'objet tableau d'origine.

listItems = ArrayUtils.remove(listItems, i);

Edit: Mais pour utiliser cette méthode, vous devez modifier le type de votre méthode.

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
Deepak Tiwari

Dans votre cas, l'utilisation de ArrayUtils est incorrecte et redondante. Vous pouvez supprimer un élément de la manière suivante: 

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

Il n'y a pas d'autre moyen de changer le type de retour de la méthode

2
Ilya

Sans bibliothèques supplémentaires, avec liste temporaire:

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()]);
1

ArrayUtils.remove

Cette méthode retourne un nouveau tableau avec les mêmes éléments du tableau d'entrée À l'exception de l'élément situé à la position spécifiée. Le type de composant Du tableau renvoyé est toujours identique à celle du tableau en entrée.

Donc, vous devriez l'utiliser comme ça

listItems = ArrayUtils.remove(listItems, i);

NOTE

  • Ici, nous avons assigné le tableau retourné à la listItem courante.
  • Comme cette méthode ne modifie pas le tableau réel mais retourne le tableau modifié après la suppression, la méthode #replace fonctionne pour String.

YES. Je suis d’accord avec zvdh j’ai manqué le but de votre méthode Car j’étais plus concentré sur le retrait d’élément.Désolé pour cela !! Car cela ne changera pas réellement le listItem et vous devez return le nouveau tableau qui contient la modification.

1
CoderCroc
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] + " ");

     }

}

Cette solution s'affiche uniquement dans l'ordre inverse, mais vous pouvez la modifier pour réorganiser la matrice en utilisant la même boucle.

0
And