根据枚举列表验证字符串列表

问题描述 投票:0回答:2

我有一个.properties文件,其中包含一组属性作为键值对。这被读入配置Enum类。此配置类包含与属性对应的枚举。我希望能够发现两者之间的差异。因此,如果属性文件包含类中不存在的属性,或者相反。

换句话说,我有一系列枚举:

MyEnumClass[] enums = {E1,E2,E3}

以及表示枚举的字符串数组

String[] properties = {"E1","E2","E3"}

我怎样才能找到两者的交集?我最好避免流。

java enums
2个回答
2
投票

这是计算交集的简单方法(更改输入以使结果明显):

List<String> properties = Arrays.asList(new String[] { "E1", "E2" });
List<MyEnumClass> enums = Arrays.asList(new MyEnumClass[] 
                          { MyEnumClass.E2, MyEnumClass.E3 });

List<String> enumNames = new ArrayList<>();
for (MyEnumClass e : enums)
    enumNames.add(e.name());

List<String> intersection = new ArrayList<>(enumNames);
intersection.retainAll(properties);
System.out.println(intersection); //[E2]

这可以计算出彼此之间的差异:

List<String> propDiff = new ArrayList<>(properties);
propDiff.removeAll(enumNames);
System.out.println(propDiff); //[E1]

List<String> enumDiff = new ArrayList<>(enumNames);
enumDiff.removeAll(properties);
System.out.println(enumDiff); //[E3]

0
投票

你可以像这样使用EnumSet<MyEnumClass>

Set<MyEnumClass> all = EnumSet.allOf(MyEnumClass.class);

然后从您的属性创建另一个EnumSet<MyEnumClass>

Set<MyEnumClass> loaded = EnumSet.noneOf(MyEnumClass.class);
for(String property : properties) {
    loaded.add(MyEnumClass.valueOf(property));
}

然后你可以使用qazxsw poi,qazxsw poi,qazxsw poi检查不同的东西:

Collection.removeAll
Collection.addAll
Collection.retainAll
© www.soinside.com 2019 - 2024. All rights reserved.