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;
}
}
}
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.
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;
}
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
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()]);
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
listItem
courante.#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 lelistItem
et vous devezreturn
le nouveau tableau qui contient la modification.
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.