Es gibt mehrere Möglichkeiten, dies zu tun.
Eine Möglichkeit ist, mit ein paar IntStreams
über die Zeilen- und Spaltenindizes verschachtelt:
String[][] testStream() {
String[][] array = new String[3][3];
IntStream.range(0, array.length).forEach(x ->
IntStream.range(0, array[x].length).forEach(y ->
array[x][y] = String.format("%c%c", letter(x), letter(y))));
return array;
}
Ein anderer Weg, das ist scheint vielversprechend Array.setAll
statt Ströme zu verwenden. Dies ist ideal zum Generieren von Werten für ein eindimensionales Array: Sie stellen eine Funktion bereit, die vom Arrayindex auf den Wert zuordnet, der im Array zugewiesen werden soll. Zum Beispiel könnten Sie dies tun:
String[] sa = new String[17];
Arrays.setAll(sa, i -> letter(i));
Leider ist es weniger praktisch für mehrdimensionale Arrays. Die setAll
-Methode, die ein Lambda akzeptiert, das einen Wert zurückgibt, der der Array-Position an diesem Index zugewiesen ist. Wenn Sie ein mehrdimensionales Array erstellt haben, werden die höheren Dimensionen bereits mit niederdimensionalen Arrays initialisiert. Sie möchten ihnen nicht zuweisen, aber Sie möchten das implizite Schleifenverhalten von setAll
.
Vor diesem Hintergrund können Sie setAll
verwenden, um die multidimensionalen Array wie folgt zu initialisieren:
static String[][] testArraySetAll() {
String[][] array = new String[3][3];
Arrays.setAll(array, x -> {
Arrays.setAll(array[x], y -> String.format("%c%c", letter(x), letter(y)));
return array[x];
});
return array;
}
Die innere setAll
ist recht nett, aber die äußere eine Aussage Lambda haben muss, die die innere setAll
ruft und gibt dann das aktuelle Array zurück. Nicht zu hübsch.
Es ist mir nicht klar, dass einer dieser Ansätze besser als die typischen geschachtelten for-Schleifen ist.
Nicht besonders relevant, aber ich denke, Sie 'Array gemeint [x] .length' für die innere Schleife. –
Ja, ich tat definitiv –
Verwenden Sie einfach eine Standard-For-Schleife. Ihr Code ist einfach und klar für den Leser. So elegant eine Stream-Lösung auch aussehen mag, ich sehe hier nichts. –