2017-12-29 2 views
-2

Ich habe eine Liste von Objekten (sie mögen dies nicht immer, gibt es weniger oder mehr, es hängt)alle ähnlichen Objekte in einer Liste

[[email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected]] 

Wie Sie die meisten von ihnen sehen den gleichen Namen Dieses Objekt verfügt über die Methode getCount(), die die Anzahl der Elemente in einem Objekt zurückgibt. Ich frage mich, wie konnte ich alle Objekte mit gleichen Namen verschmelzen (ich den Objektnamen mit getUnlocalizedName()), sondern erhöhen ihre Zählung mit getCount() jedes Objekt, so zum Beispiel ich habe

[[email protected], [email protected], [email protected]] 

Erste Einer zählt 16 und der zweite 10 Ich möchte sie zusammenführen und eine Liste erhalten, die so aussieht: [[email protected], [email protected]], Es gibt auch setCount (int) -Methode, so dass die Anzahl auf das neue Objekt gesetzt werden kann.

ich schon versucht, diese (die Liste Stapel genannt und ist wie in diesem Beispiel oben)

List<ItemStack> newStacks = Lists.newArrayList(); 
for (int index = 0; index < stacks.size(); index++) { 
    ItemStack stack = stacks.get(index); 
    ListIterator<ItemStack> iterator = stacks.listIterator(); 
    while (iterator.hasNext()) { 
     int index1 = iterator.nextIndex(); 
     ItemStack itemStack = iterator.next(); 
     if (index != index1 && stack.getUnlocalizedName().equals(itemStack.getUnlocalizedName())) { 
      newStacks.removeIf(itemStack1 -> itemStack1.getUnlocalizedName().equals(itemStack.getUnlocalizedName())); 
      stack.setCount(stack.getCount() + itemStack.getCount()); 
     } 
    } 
    newStacks.add(stack); 
} 

aber ich bekomme [[email protected], [email protected]]

+0

in Ihrem Beispiel 0. Indexwert und der 1. Indexwert ist unterschiedlich. –

+0

Erstellen Sie eine 'Map ', Schlüssel ist zum Beispiel 'item.enderPearl @ 0', Wert ist' 26'. – luk2302

+0

Was hast du bisher versucht? Zeig uns ** deinen ** Code! – MrSmith42

Antwort

0

figured it out, der richtige Weg, es zu tun ist durch das Kopieren itemstack (Kopiermethode kopiert alle Daten aus dem aktuellen ItemStack und gibt eine neue zurück) aus der Liste, da sie in der Liste selbst geändert wurde. Bei der zweiten Iteration wurde 10 vom zweiten Objekt zum ersten Objekt hinzugefügt, das zuerst auf 26 geändert wurde Iteration.

List<ItemStack> newStacks = Lists.newArrayList(); 
    for (int index = 0; index < stacks.size(); index++) { 
     ItemStack stack = stacks.get(index).copy(); 
     ListIterator<ItemStack> iterator = stacks.listIterator(); 
     while (iterator.hasNext()) { 
      int index1 = iterator.nextIndex(); 
      ItemStack itemStack = iterator.next(); 
      if (index != index1 && stack.getUnlocalizedName().equals(itemStack.getUnlocalizedName())) { 
       newStacks.removeIf(itemStack1 -> itemStack1.getUnlocalizedName().equals(itemStack.getUnlocalizedName())); 
       stack.grow(itemStack.getCount()); // the equivalent of stack.setCount(stack.getCount() + itemStack.getCount()); 
      } 
     } 
    } 
newStacks.add(stack); 
} 
Verwandte Themen