Wypisanie elementów tablicy 2D

0

Java 8.

Wykrywa że e jest typu int[] mimo że jest to int/Integer
Kod ma w założeniu wypisać elementy tablicy 2d

int[][] tab = new int[10][10];

        for (int i = 0; i < tab.length; i++) {
            for (int j = 0; j < tab[0].length;j++) {
                tab[i][j] = i + j + 1;
            }
        }
        Arrays.asList(tab).forEach(t -> {
            final StringBuilder s = new StringBuilder("");
            Arrays.asList(t).stream().forEach(e -> s.append("\t").append(e));
            System.out.println(s.toString());
        });

Druga sprawa. Istnieje jakaś funkcja do tworzenia list, która przyjmuje funkcje której parametrami są indeksy danego elementu, Np:

Collections.fill((int x, int y) -> x + y + 1)
0

Zamiast forEach użyj flatMap dostaniesz listę jednowymiarową. Co do wypełniania to można stworzyć specyficzny Supplier i za jego pomocą wypełnić tablicę.

0

Właśnie chce wypisać w nowej linii każdą podtablice.
Nie używam też Arrays.toString bo chcę aby między elementami był znak tabulatora.

0
Integer[][] tab = //...
//...
Arrays.asList(tab).stream()
				.map(st -> Arrays.asList(st).stream()
						.map(Object::toString)
						.collect(Collectors.joining("\t")))
				.forEach(x -> System.out.println(x.toString()));

Przy czym typ głównej tablicy to Integer, a nie int ponieważ autoboxing nie poradzi sobie z transformacją int[] na Integer[] w przypadku wewnętrznego wywołania Arrays.asList.

// edit

public class Int2DJoin {

	public static void main(String[] args) {
		Integer[][] tab = new Integer[10][10];
		for (int i = 0; i < tab.length; i++) {
			tab[i] = Stream.generate(new IntGenerator(i)).limit(tab[i].length).toArray(Integer[]::new);

		}

		Arrays.asList(tab).stream()
				.map(st -> Arrays.asList(st).stream()
						.map(Object::toString)
						.collect(Collectors.joining("\t")))
				.forEach(x -> System.out.println(x.toString()));

	}

	static class IntGenerator implements Supplier<Integer> {

		private int start;

		public IntGenerator(int start) {
			this.start = start;
		}

		public Integer get() {
			return 1 + start++;
		}
	}

}

Generator nie jest najlepszy, bo mutuje i nie będzie bezpieczny wielowątkowo, ale to tak na szybko napisane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1