[英]Is there a better way to get String[] from an Enum in Java?
我有一個枚舉
public enum UnitSystem {
ImperialSystem("Imperial", "in.", 1),
MetricSystem("Metric", "cm.", 2.54);
private String unitSystemName;
private String lengthSuffix;
private double lengthCoeff;
我正在嘗試獲取String[] l
將具有{"Imperial", "Metric"};
這是一個包含每個系統的unitSystemName
的數組。 現在我最好的選擇是:
String[] l = Arrays.stream(UnitSystem.values()).map(UnitSystem::name).collect(Collectors.toList()).toArray(new String[UnitSystem.values().length]);
有沒有更好的方法來實現它?
您必須在某處查看枚舉值並從中提取名稱,無論是在枚舉代碼內部(如 Calvin 的答案所建議的那樣)還是在外部代碼(如您所做的那樣)。 沒有辦法(至少我想不出)解決這個問題。
不過,您的代碼可以稍微清理一下。 沒有理由將流收集到列表然后將其轉換為數組 - 您可以直接將其轉換為數組:
String[] l =
Arrays.stream(UnitSystem.values()).map(UnitSystem::name).toArray(String[]::new);
public enum UnitSystem {
ImperialSystem("Imperial", "in.", 1),
MetricSystem("Metric", "cm.", 2.54);
UnitSystem(String unitSystemName, String lengthSuffix, double lengthCoeff) {
this.UNITE_SYSTEM_NAME = unitSystemName;
this.LENGTH_SUFFIX = lengthSuffix;
this.LENGTH_CO_EFF = lengthCoeff;
}
private final String UNITE_SYSTEM_NAME;
private final String LENGTH_SUFFIX;
private final double LENGTH_CO_EFF;
public static String[] getNames() {
String[] strings = new String[UnitSystem.values().length];
short count = 0;
for (UnitSystem s : UnitSystem.values()) {
strings[count] = s.getName();
count++;
}
return strings;
}
public String getName() {
return UNITE_SYSTEM_NAME;
}
public String getLengthSuffix() {
return LENGTH_SUFFIX;
}
public double getLengthCoeff() {
return LENGTH_CO_EFF;
}
}
通過為 UnitSystem 的每個實例使用 getter 方法完成枚舉,我們可以創建一個靜態方法,該方法返回所有這些枚舉名稱數據的 String 數組。 希望這可以幫助!
為unitSystemName
聲明一個 getter 並使用toArray(String[]::new)
將Stream<String>
轉換為String[]
。
public enum UnitSystem {
...
UnitSystem(String unitSystemName, String lengthSuffix, double lengthCoeff) {
this.unitSystemName = unitSystemName;
...
}
public String getUnitSystemName() {
return unitSystemName;
}
public static String[] getNames() {
return Arrays.stream(UnitSystem.values())
.map(UnitSystem::getUnitSystemName)
.toArray(String[]::new);
}
}
制作一個靜態名稱數組將只允許它們在類加載器加載類時加載一次。 如果您有機會多次引用此列表,那將是理想的選擇。
public enum UnitSystem
{
ImperialSystem("Imperial", "in.", 1), MetricSystem("Metric", "cm.", 2.54);
private String unitSystemName;
private String lengthSuffix;
private double lengthCoeff;
private static String[] names = Arrays.stream(UnitSystem.values())
.map(UnitSystem::name).toArray(String[]::new);
UnitSystem(String unitSystemName, String lengthSuffix, double lengthCoeff)
{
this.unitSystemName = unitSystemName;
this.lengthSuffix = lengthSuffix;
this.lengthCoeff = lengthCoeff;
}
public static String[] getNames()
{
return names;
}
public String getUnitSystemName()
{
return unitSystemName;
}
public String getLengthSuffix()
{
return lengthSuffix;
}
public double getLengthCoeff()
{
return lengthCoeff;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.