J'essaie d'obtenir une variable IntStream
à partir d'un tableau int
à n dimensions. Existe-t-il une méthode Nice API pour le faire?
En supposant que vous souhaitiez traiter un tableau de tableau séquentiellement dans une approche en lignes majeures, ceci devrait fonctionner:
int[][] arr = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
IntStream stream = Arrays.stream(arr).flatMapToInt(x -> Arrays.stream(x));
Tout d'abord, elle appelle la méthode Arrays.stream(T[])
, où T
est déduit en tant que int[]
, pour obtenir un Stream<int[]>
, puis Stream#flatMapToInt()
mappe chaque élément int[]
en IntStream
à l'aide de Arrays.stream(int[])
méthode.
Pour approfondir la réponse de Rohit, une référence à une méthode peut être utilisée pour réduire légèrement la quantité de code requise:
int[][] arr = { {1, 2, 3},
{4, 5, 6},
{7, 8, 9} };
IntStream stream = Arrays.stream(arr).flatMapToInt(Arrays::stream);
Pour ne traiter que les éléments, utilisez flatMap
comme dans la réponse de Rohit.
Pour traiter les éléments avec leurs index, vous pouvez utiliser IntStream.range
comme suit.
import Java.util.stream.IntStream;
import static Java.util.stream.IntStream.range;
public class StackOverflowTest {
public static void main(String... args) {
int[][] arr = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
// Map the two dimensional array with indices.
final IntStream intStream = range(0, arr.length).flatMap(row -> range(0, arr[row].length).map(col -> {
final int element = arr[row][col];
// E.g. multiply elements in odd numbered rows and columns by two.
return row % 2 == 1 || col % 2 == 1 ? element * 2 : element;
}));
// Prints "1 4 3 8 10 12 7 16 9 ".
intStream.forEachOrdered(n -> System.out.print(n + " "));
}
}