请问,在 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/