# Erweiterte for-Schleife für 2D-Array



## krgewb (12. Dez 2017)

Ich möchte ein Array mit Einsen füllen. Bisher mache ich es wie folgt:

```
for (int i = 0; i < meinArray.length; i++) {
    for (int j = 0; j < meinArray[i].length; j++) {
        meinArray[i][j] = 1;
    }
}
```

Geht das eleganter?


----------



## looparda (12. Dez 2017)

https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#fill-int:A-int-

```
for (int i = 0; i < meinArray.length; i++) {
    Arrays.fill(meinArray[i], 1);
}
```
Geschmackssache, denke ich. Ich finde deine Variante doch gar nicht so übel.


----------



## Flown (12. Dez 2017)

krgewb hat gesagt.:


> Geht das eleganter?


Klar

```
int[] row = IntStream.generate(() -> 1).limit(j).toArray();
int[][] arr = Stream.generate(row::clone).limit(i).toArray(int[][]::new);
//Wahlweise:
//int[][] arr = Collections.nCopies(i, row).toArray(new int[i][]);
```
PS: ooops vergessen zum adden


----------



## krgewb (30. Dez 2017)

Danke! Und wie kann ich mir die Ziffern eleganter ausgeben lassen?

```
for (int i = 0; i < meinArray.length; i++) {
    for (int j = 0; j < meinArray[i].length; j++) {
        System.out.println(meinArray[i][j]);
    }
}
```


----------



## Flown (30. Dez 2017)

Was meinst du mit eleganter? Mit Streams? 
	
	
	
	





```
Arrays.stream(arr).flatMapToInt(Arrays::stream).forEach(System.out::println);
```


----------

