java - 用于 Arraylist 处理和调用不同方法的高效 Java 构造

标签 java java-8 jaxb java-9 java-11

请问,在 Post Java 8 中是否有一种优雅且有效的方法来执行以下操作,即 1. 循环数组列表 2. 读取对象 3. 使用数组列表项中包含的值调用可能不同对象的不同方法

我确实查看了流、switch 语句,但它比我的 if-else 困惑得多。

任何帮助将不胜感激。只是寻求持续改进

List<JAXBElement<? extends Serializable>> bodyElements = eventRequestBodyTypeSrc.getContent();

            for(JAXBElement element: bodyElements){

                if(element.getName().getLocalPart().equalsIgnoreCase("A")){
                    methodA(element.getValue());
                }else if(element.getName().getLocalPart().equalsIgnoreCase("B")){
                     methodB(element.getValue());
                }else if(element.getName().getLocalPart().equalsIgnoreCase("C")){
                     methodC(element.getValue());
                }else if(element.getName().getLocalPart().equalsIgnoreCase("D")){
                     methodD(element.getValue());
                }else if(element.getName().getLocalPart().equalsIgnoreCase("E")){
                     methodE(element.getValue());
                }else{
                 }

            }

最佳答案

我认为你有点XY Problem正在进行中。我会在更高级别上重构它以封装字符串及其相关操作。这是使用枚举的粗略概念:

enum Action {
    A("a") {
        @Override
        void doSomething(Serializable value) {
            // ...
        }
    },
    B("b") {
        @Override
        void doSomething(Serializable value) {
            // ...
        }
    };

    private static final Map<String, Action> actionsByName = Arrays.stream(values())
            .collect(Collectors.toMap(a -> a.name, a -> a));

    private final String name;

    Action(String name) {
        this.name = name;
    }

    abstract void doSomething(Serializable value);

    public static void processElement(JAXBElement<? extends Serializable> element) {
        Action action = actionsByName.get(element.getName().getLocalPart().toLowerCase());
        if (action != null) {
            action.doSomething(element.getValue());
        } else {
            // ...
        }
    }
}

关于java - 用于 Arraylist 处理和调用不同方法的高效 Java 构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55820446/

相关文章:

java - 使用java连接hsql数据库

java - 没有 XML 的 Hibernate ORM

java-8 - 无法使用 java.util.Base64 正确编码和解码

java - 嵌入式 jetty 是否支持 java 8 紧凑配置文件?

java - 在 Java 8 中使用 Group By 和属性

java - 无论如何,使用 JAXBIntrospector 而不进行 Jaxb 解码的类强制转换

eclipse - 创建 Web 服务时的 LinkageError(Tomcat、CXF 和 Eclipse)

java - 用于从 hdfs 提供输入并将输出写入 excel 文件的 Hadoop Mapreduce 示例

java - 如何从菜单按键调用上下文菜单?

xml - JAXB 能否首先通过包含进行编码,然后通过@XmlIDREF 进行编码以供后续引用?