Wypisanie elementów tablicy 2D

yafud
2014-10-09 13:27
yafud
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)
edytowany 2x, ostatnio: furious programming, 2016-12-13 18:26

Pozostało 580 znaków

2014-10-09 15:18

Rejestracja: 12 lat temu

Ostatnio: 2 dni temu

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ę.

Pozostało 580 znaków

yafud
2014-10-09 15:41
yafud
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.

Pozostało 580 znaków

2014-10-09 16:43

Rejestracja: 12 lat temu

Ostatnio: 2 dni temu

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.

edytowany 2x, ostatnio: Koziołek, 2014-10-09 16:57

Pozostało 580 znaków

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