为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUX布斯 2022-06-30 11:03:56
我有一个.properties文件,其中包含一组属性作为键值对。这被读入配置枚举类。此配置类包含对应于属性的枚举。我希望能够发现两者之间的差异。因此,如果属性文件包含类中不存在的属性,或者相反。换句话说,我有一个枚举数组:MyEnumClass[] enums = {E1,E2,E3}和一个表示枚举的字符串数组String[] properties = {"E1","E2","E3"}我怎样才能找到两者的交集?最好我想避免流。
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


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]


查看完整回答
反对 回复 2022-06-30
?
噜噜哒

TA贡献1784条经验 获得超7个赞

你可以这样使用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));

}

Collection.removeAll然后,您可以使用, Collection.addAll,来检查不同的内容Collection.retainAll:


// all will now contain every element from loaded

all.addAll(loaded);

// all will now contain every element which was not contained in loaded

all.removeAll(loaded);

// all will now contain every element which was contained in loaded

all.retainAll(loaded); 


查看完整回答
反对 回复 2022-06-30
  • 2 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信