簡體   English   中英

根據枚舉列表驗證字符串列表

[英]Validate a list of strings against a list of Enums

我有一個.properties文件,其中包含一組屬性作為鍵值對。 這被讀入配置Enum類。 此配置類包含與屬性對應的枚舉。 我希望能夠發現兩者之間的差異。 因此,如果屬性文件包含在類中不存在的屬性,或者相反。

換句話說,我有一個枚舉數組:

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

和代表枚舉的字符串數組

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

如何找到兩者的交集? 優選地,我想避免流。

這是一種計算交點的簡單方法(更改輸入以使結果顯而易見):

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]

您可以這樣使用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.removeAllCollection.addAllCollection.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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM