Проверьте список строк по списку Enums - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть файл .properties, содержащий набор свойств в виде пар ключ-значение.Это читается в конфигурационный класс Enum.Этот класс конфигурации содержит перечисления, которые соответствуют свойствам.Я хочу быть в состоянии уловить несоответствие между ними.Таким образом, если файл свойств содержит свойство, которое не существует в классе или наоборот.

Другими словами, у меня есть массив Enums:

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

и массив строк, представляющих перечисления

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

Как найти пересечение двух?Желательно избегать потоков.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вот простой способ вычисления пересечения (изменил входные данные, чтобы сделать результат очевидным):

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 голосов
/ 20 февраля 2019

Вы можете использовать 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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...