Ich habe zwei Sets - Land und Staat. Ich möchte alle möglichen Permutationen von beiden erstellen.String-Permutationen aus mehreren Set-Werten generieren (Java 8 Streams)
import java.util.*;
import java.util.stream.Collectors;
public class HelloWorld{
public static void main(String []args){
System.out.println("Hello World");
Set<String> countryPermutations = new HashSet<>(Arrays.asList("United States of america", "USA"));
Set<String> statePermutations = new HashSet<>(Arrays.asList("Texas", "TX"));
Set<String> stateCountryPermutations = countryPermutations.stream()
.flatMap(country -> statePermutations.stream()
.flatMap(state -> Stream.of(state + country, country + state)))
.collect(Collectors.toSet());
Set<String> finalAliases = Optional.ofNullable(stateCountryPermutations)
.map(Collection::stream).orElse(Stream.empty())
.map(sc -> "houston " + sc)
.collect(Collectors.toSet());
System.out.println(stateCountryPermutationAliases);
}
}
Der Status oder das Land oder beide Permutationen können null sein. Ich möchte immer noch, dass mein Code funktioniert.
Anforderungen
Wenn staatliche Permutation null ist, sollte die endgültige Ausgabe [Houston USA, Houston Vereinigte Staaten von Amerika]
werden, wenn Land Permutationen null ist, sollte die endgültige Ausgabe sein [Houston TX Houston Texas,]
Wenn beide null sind, dann keine Ausgabe
ich meinen Code unten
Set<String> stateCountryPermutations =
Optional.ofNullable(countryPermutations)
.map(Collection::stream)
.orElse(Stream.empty())
.flatMap(country -> Optional.ofNullable(statePermutations)
.map(Collection::stream)
.orElse(Stream.empty())
.flatMap(state -> Stream.of(state + country, country + state)))
.collect(Collectors.toSet());
Dies erfüllt 3. Wenn entweder Permutation ist null geändert, 1 & 2 nicht erfüllt sind. Ich bekomme keine Aliase als Antwort. Wie ändere ich meinen Code?
ich das letzte Codebeispiel versucht habe, und ich emtpy Ergebnisse, wenn ein oder beiden Sätze null (oder leer), dh es nur erfüllt 3. Dies ist kein surpise, wie Sie entweder Karte ** keine ** Länder in dem Zustand Streams, oder einige Länderströme, um Streams zu leeren, oder ** nichts **, um Streams zu leeren. Um dies zu lösen, könnten Sie ein Null-Objekt (nicht null selbst, aber etwas wie eine leere Zeichenfolge) als Platzhalter für "kein Land" oder "kein Zustand" einführen. Oder überprüfen Sie einfach vor dem Stream und verwenden Sie einfach die Eingabesätze als Ergebnis ("if (countries == null) permutations = states;"). –
danke @MalteHartwig, habe meinen Beitrag aktualisiert. Könnten Sie bitte eine Antwort mit Code schreiben –
Um zu vereinfachen habe ich 2 Sätze verwendet. Mein tatsächlicher Code erfordert das Permutieren durch 4 Sätze. if-else würde zu unordentlich werden –