2017-02-20 4 views
1

Ich habe ein Stück Code, der gut funktioniert, aber ich frage mich, ob es eine bessere Möglichkeit gibt, das gleiche Ergebnis zu erhalten.Java Set enthält mehrere Rückgabeoptionen

public enum Status { 
    ENUM1, ENUM2, ENUM3, ENUM4; 

    public static Status getStatus(Set<String> set) { 
     if (set.contains("x")) { 
      return ENUM1; 
     } 
     if (set.contains("y") || set.contains("z")) { 
      return ENUM2; 
     } 
     if (set.contains("c")) { 
      return ENUM3; 
     } 
     return ENUM4; 
    } 
} 

Also im Grunde ist dies der Code (xyzc sind alle Konstanten). Also nimmt die Methode eine Reihe von Strings auf und muss die richtige Enum ausgeben. Gibt es einen besseren Weg, um das gleiche Ergebnis zu erzielen?

Edit: Dies ist die Art und Weise, wie die Methode ist, Set ist nie leer zu beginnen, also nicht diesen Teil kümmern.

Edit2: hoffe, dies löscht es auf ..

+1

Ihr Code führt zu einer NullPointerException. Es tut mir leid ... Dein Set wird niemals initialisiert. Die IDE sollte dir das zeigen. –

+0

Der Code wird nicht nur kompiliert. Sie müssen zunächst die Variable initialisieren. – SachinSarawgi

+1

Nein, das ist nur ein Beispiel. Das Set ist zu Beginn nie leer. – Rauno

Antwort

4

Sie können betrachten Sie Ihre Umwandlung Logik nach innen Status ENUM Einkapseln . Etwas wie das:

enum Status{ 
    Option1("x"), 
    Option2("y", "z"), 
    Option3("c"), 
    Default; 

    Status (String ... values){ 
     this.values = values; 
    } 

    String [] values; 

    static Status convert(Set<String> set){ 
     for (Status status : Status.values()) 
      for (String str : status.values) 
       if (set.contains(str)) 
        return status; 
     return Default; 
    } 
} 
1

Sie ein HashMap verwenden:

HashMap<String, String> map = new HashMap<>(); 

// init with 
map.put("x", "option 1"); 
map.put("y", "option 2"); 
map.put("z", "option 2"); 
map.put("c", "option 3"); 

zu benutzen:

String option = map.get("x"); 
+0

Sind Sie sicher, eine neue 'HashMap' zu erstellen und das Einfügen von 4 verschiedenen Werten ist ein optimaler Ansatz, der dann 3 bedingte Anweisungen verwendet ? –

+0

Wahrscheinlich nicht, aber der Code wird sauberer und einfacher zu erweitern sein. – Zack

+0

@Zack, aber es funktioniert nicht wirklich, weil er eine willkürliche Menge hat, die einen interessanten Wert enthalten kann oder auch nicht, nicht den fraglichen Wert. mit seiner Annäherung muss er auch entweder über Satzelemente oder Kartenschlüssel iterieren. –