2017-03-11 1 views
2

Lassen Sie uns sagen, dass ich eine Enumeration als solche haben:ein Array von Enum generieren Werte

public enum Fruit { 
    APPLES("Apples"), 
    BANANAS("Bananas"), 
    PEAR("Pear"), 
    ORANGE("Oranges"); 

    private final String string; 

    Fruit(String string) { 
     this.string = string; 
    } 
} 

Was ist der beste Weg, um eine String[] Array mit den String-Werte der Enumeration zu erzeugen, also wäre "Apples", "Bananas, "Pear", "Oranges"

Ich kann mir ein paar Wege vorstellen, aber sie könnten chaotisch werden und ich frage mich, ob es einen direkten Weg gibt, diese Werte zu bekommen.

Antwort

8

Hier ist die kürzeste, die ich tun konnte:

Arrays.stream(Fruit.values()).map(Fruit::getName).toArray(String[]::new); 

Fruit.getName() wäre ein Verfahren Rückgabe des string Feld in der Enum

+0

Upvote wegen der Verwendung von Java8-Syntax. Dies ist die einzige aktuelle Lösung. – Bevor

+2

Ich würde sagen, dass 'Arrays.stream (Fruit.values ​​())' wäre besser als 'EnumSet.allOf (Fruit.class) .stream()', kürzer und nicht die Schaffung eines "EnumSet". – Andreas

+0

Guter Punkt, ging mein Verstand sofort für ein EnumSet (wie das ist, was ich am häufigsten verwende), ohne über andere Optionen nachzudenken. Ich habe die Antwort bearbeitet. –

2

Sie können so etwas tun.

Arrays.toString(Fruit.values()).replaceAll("^.|.$", "").split(", "); 
+0

In meinem Fall kann es sicher sein, Enum-Konstanten, deren "Name" -String nicht mit dem Namen der Enum-Konstante übereinstimmt. Also würde ich es nicht so machen wollen. – andrewDev15

+0

@ andrewDev15 Was "Name" Zeichenfolge? Meintest du das Feld "String"? Soll das der "Name" sein? Sie haben nicht angezeigt, ob dieses Feld von einer 'getString()', 'getName()' oder 'toString()' Methode zurückgegeben wird. Unter der Annahme des letzten, was angesichts des Feldnamens keine schlechte Annahme ist, macht dieser Code, was Sie wollen. Vielleicht zeigst du in der Frage besseren Code, wenn du das anders klären willst. – Andreas