public static void print(int[][] a, char c, char d) {
Arrays.stream(a).forEach(b ->{
Map<Boolean, List<Integer>> collect = Arrays.stream(b).mapToObj(i->Integer.valueOf(i)).collect(Collectors.partitioningBy(i->i==1 ));
} );
}
Könnt ihr mir helfen? Bei 1 soll char c ausgegeben werden, andernfalls char d. Die Reihenfolge soll beibehalten werden. Es sollen nur Stream-Funktionen und es sollen kein if-else und kein ternärer Operator benutzt werden.
1 „Gefällt mir“
Ich nehme an, ein switch statement ist auch nicht erlaubt?
Genau, keine expliziten Fallunterscheidungen.
nolle
28. Januar 2020 um 21:07
4
Suchst du so etwas:
private static char choice(int i, char c, char d) {
return Optional.of(i).filter(j-> j == 1).map(j-> c).orElse(d);
}
public static void print(int[][] a, char c, char d) {
Arrays.stream(a).flatMapToInt(Arrays::stream).map(i-> choice(i, c, d))
.forEach(System.out::print);
}
1 „Gefällt mir“
Genau das meinte ich. Danke!
int[][] a = { { 1, 1, 1 }, { 1, 0, 1 }, { 1, 1, 1 } };
Arrays.stream(a).flatMapToInt(Arrays::stream)
.map(i -> Optional.of(i).filter(j -> j == 1).map(j -> 'a').orElse(' ')).forEach(System.out::print);
die Ausgabe ist
979797973297979797
was muss ich ändern?
AmunRa
29. Januar 2020 um 19:54
7
Naja entweder zu char casten oder statt eines chars eben einen String zurückgeben
casten klappt nicht, weder char
noch Character
.
/e .mapToObj()
klappt: Arrays.stream(a).flatMapToInt(Arrays::stream).mapToObj(i -> Optional.of(i).filter(j -> j == 1).map(j -> 'a').orElse(' ')).forEach(System.out::print);
.