Есть ли способ перебирать список объектов, а затем возвращать значение на основе перечисляемого значения для каждого объекта

#java #list #object #enums #return

#java #Список #объект #перечисления #Возврат

Вопрос:

Я новичок в Java и у меня есть список объектов с именами listAnimal , вот пример ниже:

 [Animal{name='Atlantic', type='Actinopterygii', scienName='sturio', country='Global', endangerment='Critical Endangerment', popTrend='Decreasing'}, Animal{name='eel', type='Actinopterygii', scienName='Anguilla anguilla', country='Europe', endangerment='Critical Endangerment', popTrend='Decreasing'},
  

у меня есть несколько классов enums, которые я хотел бы использовать

 public enum LevelOfEndangerment {
/**
 * an enum to give values to levels of endangerment
 */

EXTINCT(8), NEAR_EXTINCT(7), CRITICAL_ENDANGERMENT(6), ENDANGERED(5), SOMEWHAT_VULNERABLE(4), NEAR_VULNERABLE(3),
NON_CONCERN(2), DATA_DEFICIENT(1), NOT_EVALUATED(0);

private int value;

LevelOfVulnerability (int aValue) {
    this.value = aValue;
}

public int getValue () {
    return value;
}
  

Я изо всех сил пытаюсь придумать способы перебора listAnimal и проверить значение угрозы в деталях объекта Animal, например «Критическая угроза», и использовать перечисление для возврата значения 6 в соответствии с его значением AValue.

Большое спасибо

Комментарии:

1. Есть ли у вас подобный метод LevelOfEndangerment getEndargement() в вашем Animal классе?

Ответ №1:

Если у вас есть single Animal , то вы можете преобразовать endangerment string в ENUM и получить значение

 String eng = animal.getEndargement();
LevelOfEndangerment engVal = LevelOfEndangerment.valueOf(eng.replace(" ","_").toUpperCase());
Integer value = engVal.getValue();
  

Если у вас есть список Animal , вы можете передавать поток и получать значение

 List<Integer> values = listAnimal.stream()
                                 .map(an-> LevelOfEndangerment.valueOf(an.getEndargement().replace(" ","_").toUpperCase())
                                 .map(LevelOfEndangerment::getValue)
                                 .collect(Collectors.toList());
  

Комментарии:

1. в этом втором примере, откуда берутся значения .getEndangerment?

2. Это лямбда-выражение, пожалуйста, ознакомьтесь с этим документом docs.oracle.com/javase/tutorial/java/javaOO / … @user14087442