Groups | Search | Server Info | Keyboard shortcuts | Login | Register
Groups > de.comp.lang.java > #13419
| From | Patrick Roemer <sangamon@netcologne.de> |
|---|---|
| Newsgroups | de.comp.lang.java |
| Subject | Re: Brauche Hilfe bei "Funktionale Programmierung " |
| Date | 2022-11-21 10:10 +0100 |
| Organization | news.netcologne.de |
| Message-ID | <tlffat$3ltdo$1@newsreader4.netcologne.de> (permalink) |
| References | <tlb95p$1k03$1@gwaiyur.mb-net.net> <tlbf81$4v0f$1@yggdrasil.dn.cgarbs.de> <tlbo6p$2f4v$1@gwaiyur.mb-net.net> |
Responding to Ralf Schneider:
> public List<ZahlenPaar> mischeZahlenListen(List<BigInteger> listeInnen,
> List<BigInteger> listeAussen){
>
> // Darin eine Funktion zur Erstellung eins Objektes:
> BiFunction<BigInteger, BigInteger, ZahlenPaar> erstelleObjekt = (o,i) ->
> { ZahlenPaar zp = new ZahlenPaar(i, o);
> return zp;
> };
>
> List<ZahlenPaar> gemischtePaare = listeAussen.stream()
> .map(first -> {
> ZahlenPaar attribute = listeInnen.stream()
> .filter(second -> second != BigInteger.ZERO)
> .mapToObj(second -> { ZahlenPaar z =
> erstelleObjekt.apply(first, second);
> return z;
> });}).collect(Collectors.toList());
>
> return gemischtePaare;
> }
>
> Ich will zwei Listen (List<BigInteger> ) in einer geschachtelten Schleife
> so miteinander kombinieren, dass alle Elemente der einen Liste mit allen
> Elementen der anderen Liste paarig in je ein Objekt des Typs
> List<ZahlenPaar> umgewandelt werden.(1,2,3 und 4,5,6 sollen werden 1;4,
> 1;5, 1;6, 2;4 usw. bis zum neunten.)
Disclaimer: Mein Java ist etwas angestaubt, kann durchaus sein, dass es
besser geht...
Wenn Du verschachtelt über zwei Streams #map() aufrufst, erhältst Du
auch ein verschachteltes Stream<Stream<...>>. Du wirst den Kombinator
#flatMap() benötigen.
Vergleiche die Signaturen:
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
<R> Stream<R> flatMap(
Function<? super T, ? extends Stream<? extends R>> mapper
);
https://www.baeldung.com/java-difference-map-and-flatmap
import java.math.*;
import java.util.*;
import java.util.stream.*;
static class Pair<A, B> {
// ...
}
private static <A, B> List<Pair<A, B>> combinations(
List<A> as, List<B> bs
) {
return
as.stream().flatMap(a ->
bs.stream().map(b ->
new Pair<A, B>(a, b)
)
)
.collect(Collectors.toList());
}
List<BigInteger> as =
Arrays.asList(1, 2, 3)
.stream()
.map(BigInteger::valueOf)
.collect(Collectors.toList());
List<BigInteger> bs =
Arrays.asList(4, 5, 6)
.stream()
.map(BigInteger::valueOf)
.collect(Collectors.toList());
System.out.println(combinations(as, bs));
// [(1, 4), (1, 5), (1, 6), (2, 4), ...]
Mit #mapMulti() kann man zum selben Ergebnis kommen, da sehe ich aber
konzeptuell überhaupt keinen Vorteil - #flatMap() ist generischer.
https://www.baeldung.com/java-mapmulti
Wenn Du eh schon Java machst und funktionale Aspekte einbringen willst,
fein. Wenn Du (auf der JVM) funktionale Programmierung lernen möchtest,
könnte Scala eine bessere Wahl sein. Nur zum Vergleich mal Scala-Versionen:
def combinations[A, B](as: List[A], bs: List[B]): List[(A, B)] =
as.flatMap(a => bs.map((a, _)))
def combinations[A, B](as: List[A], bs: List[B]): List[(A, B)] =
for { a <- as ; b <- bs } yield (a, b)
Back to de.comp.lang.java | Previous | Next — Previous in thread | Next in thread | Find similar
Re: Brauche Hilfe bei "Funktionale Programmierung " Christian Garbs <mitch@cgarbs.de> - 2022-11-19 20:44 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-19 23:17 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-20 21:30 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-21 14:09 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Patrick Roemer <sangamon@netcologne.de> - 2022-11-21 10:10 +0100
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-21 14:23 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-21 16:35 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-21 14:25 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Christian Garbs <mitch@cgarbs.de> - 2022-11-26 00:03 +0000
Re: Brauche Hilfe bei "Funktionale Programmierung " Ralf Schneider <schneiderr@freenet.de> - 2022-11-26 18:55 +0000
csiph-web