Ich bin neu in Java 8 und habe eine Bedingung, wo einige Prüfungen vorgenommen werden müssen, um ein Objekt zu erstellen. Ich benutze natürlich Streams dafür und habe eine harte Zeit damit verbracht, dies zu erledigen.Umgang mit verschachtelten if/else-Anweisungen mit Java 8 Streams
Eingabe ist ein HashMap-Objekt mit Schlüssel/Wert-Paaren und Ausgabe sollte darunter sein.
| userrole | userid | username | output |
|------------|--------|----------|----------|
| "" (blank) | 111 | amathews | 111 |
| "" | | amathews | amathews |
| Admin | 111 | amathews | 111 |
| Admin | 111 | "" | 111 |
| Admin | | amathews | Admin |
Dies ist, wie die prezidence Benutzer-ID> UserRole> Benutzername ist.
Jedes HashMap-Objekt enthält UserRole/Benutzername/BenutzerID als Schlüssel und seine Werte zusammen mit anderen Schlüssel/Wert-Paaren. Wir werden eine Menge verschachtelter if/else-Anweisungen haben, um diese Aufgabe vor einer Java-Version auszuführen.
Wir werden eine Menge verschachtelter if/else-Anweisungen haben, um diese Aufgabe in einer früheren Java-Version auszuführen.
Hier ist der Code, den ich bis jetzt habe.
map.entrySet().stream()
.filter(e -> e.getValue() instanceof String || e.getValue() instanceof Integer)
.filter(e -> e.getKey().contains("userrole") || e.getKey().contains("userid") || e.getKey().contains("username"))
.map(e -> e.getValue())
.collect(Collectors.toList());
Ich weiß, dass die Art, wie ich Kartenfunktion im Stream geschrieben habe, auch nicht korrekt ist. Wie erreichen Sie dies in Java 8? Ich weiß nicht, wie ich den verschachtelten if/else Teil hier hinzufügen soll.
Bitte helfen Sie mir hier Ich bin fest und kann nicht weitermachen. Vielen Dank.
Edit: Sorry Wenn ich das Problem nicht genau angegeben hätte. Hier ist der Code snippiet.
public List<UserAction> getUserActionList(Map<String, String> map)
{
String userRole = map.get("userrole");
String userName = map.get("username");
String userId = map.get("userid");
String output = null;
// if userrole, userid and username are not null/empty, then output is userid
if(!checkForNullEmpty(userRole) && !checkForNullEmpty(userId) && !checkForNullEmpty(userName))
output = userId;
// if userrole and userid are null/empty and username is not empty/null, then output is username
else if(checkForNullEmpty(userRole) && checkForNullEmpty(userId) && !checkForNullEmpty(userName))
output = userName;
// if userid and username are null/empty and userrole is not empty/null, then output is userrole
else if(!checkForNullEmpty(userRole) && checkForNullEmpty(userId) && checkForNullEmpty(userName))
output = userRole;
List<UserAction> udList = new ArrayList<>();
// Add the map and output into a UserAction object
udList.add(new UserAction(map, output));
return udList;
}
Ich hatte nur 3 Bedingungen hier nach der Tabelle behandelt. Also muss dies neu strukturiert werden um Java 8 Streams zu verwenden. Hoffe es macht jetzt Sinn.
Was ist dein tatsächliches Problem? Funktioniert der von Ihnen gepostete Code nicht? Wenn nicht, warum nicht? Wenn es funktioniert, was genau fragst du? Vielleicht poste ausführbaren Code, der Beispieldaten hat und was der gewünschte Datentyp sein sollte – Bohemian
Danke für Ihre Antwort. Ich habe das Snippet hinzugefügt hoffe es ist jetzt klar. – 15R6
Ist garantiert, dass mindestens einer der Werte in der Karte gefunden wird? – Bohemian