如何获取Java枚举中所有成员的自定义字段值?
解决方法
方法一:使用Java 8+ Stream API(简洁高效)
通过getEnumConstants()拿到所有枚举实例后,用Stream流提取每个实例的locale字段,最后转成数组:
import java.util.Arrays; public class Main { public static void main(String[] args) { Locale[] enums = Locale.class.getEnumConstants(); String[] localeValues = Arrays.stream(enums) .map(locale -> locale.locale) .toArray(String[]::new); // 输出结果:[PL-pl, DE-de, EN-en] System.out.println(Arrays.toString(localeValues)); } }
方法二:传统循环遍历(兼容Java 8以下版本)
如果项目使用Java 8之前的版本,直接循环枚举数组,逐个提取字段值存入新数组:
import java.util.Arrays; public class Main { public static void main(String[] args) { Locale[] enums = Locale.class.getEnumConstants(); String[] localeValues = new String[enums.length]; for (int i = 0; i < enums.length; i++) { localeValues[i] = enums[i].locale; } // 输出结果:[PL-pl, DE-de, EN-en] System.out.println(Arrays.toString(localeValues)); } }
补充优化建议
如果后续需要频繁获取该字段数组,可以在枚举类中新增静态方法,简化调用逻辑:
public enum Locale { PL("PL-pl"), DE("DE-de"), EN("EN-en"); public final String locale; private Locale(String locale) { this.locale = locale; } // 直接返回所有locale字段组成的数组 public static String[] getAllLocaleValues() { return Arrays.stream(values()) .map(l -> l.locale) .toArray(String[]::new); } }
使用时直接调用Locale.getAllLocaleValues()即可获取目标数组。
内容的提问来源于stack exchange,提问作者kubas1178
相关产品推荐
相关产品推荐

