有没有一种方法可以遍历对象列表,然后根据每个对象的枚举值返回一个值

时间:2020-08-17 16:56:21

标签: java list object enums return

我是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'},

我有一些我想使用的枚举类

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并检查动物对象详细信息中的濒危值,例如“严重危急”,并使用枚举根据其aValue返回值6。 >

非常感谢

1 个答案:

答案 0 :(得分:0)

如果您只有一个Animal,则可以将endangerment字符串转换为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());