Solange diese Frage unbeantwortet bleibt und sich Java im Laufe der Jahre weiterentwickelt hat, habe ich beschlossen, meine eigene zu stellen.
Lassen Sie uns der Übersichtlichkeit halber das Eingabe-String-Array so ändern, dass es 5 eindeutige Elemente enthält.
String[] elements = {"a", "b", "c", "d", "e"};
Sie möchten auf zwei Geschwister in der Liste zugreifen, wobei jede Iteration um einen Index erhöht wird.
for (int i=0; i<elements.length-1; i++) {
String left = elements[i];
String right = elements[i+1];
System.out.println(left + " " + right);
}
Drucken der Paare von linken und rechten in vier Iterationen führen in den Leitungen a b
, b c
, c d
, d e
in der Konsole.
Was kann passieren, wenn das Eingabezeichenfolgenarray weniger als 2 Elemente enthält? Nichts druckt unsere, solange diese for-Schleife immer zwei Geschwisterknoten extrahiert . Mit weniger als 2 Elementen tritt das Programm nicht in die Schleife selbst ein.
Soweit Ihr Snippet angibt, möchten Sie die extrahierten Werte nicht verwerfen, sondern ihnen eine weitere Variable hinzufügen, vorausgesetzt, Sie möchten sie außerhalb des Bereichs der for-Schleife entweder in einer Liste oder in einem Array speichern. Angenommen, Sie möchten die Geschwister mit dem +
Charakter verketten .
List<String> list = new ArrayList<>();
String[] array = new String[elements.length-1];
for (int i=0; i<elements.length-1; i++) {
String left = elements[i];
String right = elements[i+1];
list.add(left + "+" + right);
array[i] = left + "+" + right;
}
Das Drucken des Inhalts sowohl der Liste als auch des Arrays ( Arrays.toString(array)
) führt zu:
[a+b, b+c, c+d, d+e]
Java 8
Ab Java 8 könnten Sie versucht sein, den Vorteil der Stream-API zu nutzen. Sie wurde jedoch für die Verarbeitung der einzelnen Elemente aus einer Quellensammlung entwickelt. Es gibt keine solche Methode, um zwei oder mehr Geschwisterknoten gleichzeitig zu verarbeiten.
Die einzige Möglichkeit besteht darin, die Stream-API zu verwenden, um stattdessen die Indizes zu verarbeiten und sie dem tatsächlichen Wert zuzuordnen. Solange Sie mit einem primitiven Stream beginnen, der aufgerufen wird IntStream
, müssen Sie die IntStream::mapToObj
Methode verwenden, um eine Box zu erhalten Stream<T>
:
String[] array = IntStream.range(0, elements.length-1)
.mapToObj(i -> elements[i] + "+" + elements[i + 1])
.toArray(String[]::new);
List<String> list = IntStream.range(0, elements.length-1)
.mapToObj(i -> elements[i] + "+" + elements[i + 1])
.collect(Collectors.toList());