2017-11-08 3 views
1

fragen sich, was die eleganteste Art und Weise ist folgendes zu erreichen:Wie ein Element in einer Liste nach jeder x-te Element hinzufügen in Java

„ein Element hinzufügen nach jeder x-te Element in einer Liste“.

Ich habe diese, die funktioniert, aber sieht sehr hässlich zu mir:

ListIterator<Something> it = items.listIterator(); 
    int i = 0; 
    int breakPoint = 3; 
    while(it.hasNext()) { 
     it.next(); 
     i++; 
     if(i == breakPoint) { 
      it.add(new Something()....); 
      i = 0; 
     } 
    } 

Ich würde es vorziehen, dies zu tun, ohne externe Bibliotheken und so weiter. Irgendwelche eleganteren Weisen, die auch lesbar sind und sich nicht auf Tricks verlassen?

+0

Sie können die Logik vereinfachen, indem Sie '%' ... 'if (i% 3 == 0) ... add() ... i ++' verwenden. Dann brauchen Sie die breakPoint-Variable nicht. – hamena314

+0

Ich wäre mehr besorgt über die Effizienz als die Eleganz an sich. Ich weiß, dass Sie sich darauf konzentrieren sollten, lesbaren Code zu schreiben, aber es ist alles zu einfach, merkwürdig langsamen Code zu schreiben, wenn Sie so etwas tun. Wenn Sie nicht mit einer verknüpften Liste zu tun haben, wird das Hinzufügen in der Mitte der Liste ein Mörder sein. Mein Ansatz wäre, am Ende der Liste leeren Platz für die zusätzlichen Elemente zuzuweisen und dann die Elemente zu mischen. –

Antwort

4

Sie haben kein Iterator benötigen, verwenden void add(int index, E element):

for (int i = 3; i < items.size(); i+=3) { 
    items.add (i++, new Something()); 
} 

Dies wird durch das Hinzufügen eines Elements bei Index 3. Hinweis beginnen, dass das ursprüngliche Element bei Index 3 bis 4 Index bewegen, weshalb Ich habe i++ innerhalb der Schleife (da das nächste Element bei Index 7, nicht 6 hinzugefügt werden soll).

+0

Ich habe 'java.lang.UnsupportedOperationException' mit Ihrem Beispiel bekommen. –

+0

@EugeneKirin Welche 'List'-Implementierung haben Sie verwendet? Wenn Sie eine unveränderliche Liste (oder Liste konstanter Größe) verwendet haben, würde 'add' fehlschlagen. Es funktioniert gut mit 'java.util.ArrayList'. – Eran

+0

Ich benutzte 'Arrays.asList (" item1 "," ... ");' –

Verwandte Themen