Kotlin flatMap - Karte

9

Angenommen, ich habe eine Liste mit Elementen der Größe 30k, und ich möchte eine Operation für alle möglichen Paare innerhalb einer Liste durchführen. Also ich hatte:

%Vor%

Frage 1: Gibt es etwas, das ich als Alternative nutzen kann? (Wie Anwendungsfunktoren).

Ich habe auch bemerkt, dass diese flatMap-Map-Operation wesentlich langsamer ist als die imperative Loop-Version. (vielleicht aufgrund von Schließungen?)

%Vor%

Frage 2: Gibt es eine Möglichkeit, die Leistung der flatMap / map-Version zu verbessern?

    
Francis Fredrick Valero 06.12.2015, 01:24
quelle

2 Antworten

1

Wenn wir auf die Frage 2 antworten, denken wir darüber nach, flatMap overload hinzuzufügen, was keine Closures für jedes Element in der äußeren Sammlung / Sequenz erzeugt: Ссылка

Aber wenn Sie einige Nebenwirkungen für jedes Paar ausführen möchten, anstatt die Sequenz zu transformieren, rate ich Ihnen, bei for -loops oder inline forEach lambdas zu bleiben, was im Grunde dasselbe ist / p>     

Ilya 07.12.2015, 18:17
quelle
2

Einige Alternativen mit Auswirkungen auf die Leistung:

  1. com. google.common.collect.Sets.cartesianProduct (java.util.Set ...) : "Gibt jede mögliche Liste zurück, die gebildet werden kann, indem man ein Element aus jedem der gegebenen Mengen in der richtigen Reihenfolge auswählt; der 'n- ary kartesisches Produkt 'der Sets. "
    • Dies erfordert, dass Ihre Listenelemente eindeutig sind. Wenn dies nicht der Fall ist, müssen Sie jedes Element in ein eindeutiges Objekt einfügen, damit alle Elemente dem Eingabe-Set hinzugefügt werden können.
    • In meinen Tests habe ich jedoch festgestellt, dass es langsamer ist als die Lösung flatMap / map . : - (
  2. forEach / forEach : Da Sie einfach eine Operation für jedes Paar durchführen möchten, müssen Sie nicht unbedingt flatMap oder map verwenden, um die Liste zu transformieren, damit Sie forEach / verwenden können. forEach stattdessen:

    %Vor%
    • In meinen Tests habe ich festgestellt, dass dies etwas schneller ist als die for / for -Lösung. : -)

Wenn Sie die Liste transformieren müssen, dann scheint Ihre flatMap / map -Lösung die beste Lösung zu sein.

    
mfulton26 07.12.2015 16:34
quelle

Tags und Links