请,在Post Java 8中,有没有一种优雅而有效的方法来执行以下操作,即1.在数组列表中循环2.读取对象3.使用数组列表项中包含的值调用潜在不同对象的不同方法
我确实看了流,开关语句,但它比我的如果其他的要混乱得多。
任何帮助都将不胜感激。只是寻求持续的改进
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{
}
}
作为一个精益解决方案,我将首先收集所有映射,如下所示:
Map<String, Consumer<Serializable>> dispatchers = new HashMap<>();
dispatchers.put("A", this::methodA);
// etc.
...并像这样调度元素:
Consumer<Serializable> dispatcher = dispatchers.get(element.getName().getLocalPart().toUpperCase(Locale.US));
if (dispatcher != null) {
dispatcher.accept(element.getValue());
}
我认为你有一点XY问题。我会在更高的层次上重构它,以封装字符串及其相关操作。下面是一个使用枚举的粗略概念:
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中使用ResultSet,但不确定如何正确关闭它。我正在考虑使用ResultSet构造一个HashMap,然后在那之后关闭ResultSet。这种HashMap技术是有效的还是有更有效的方法来处理这种情况?我需要键和值,因此使用HashMap似乎是一个合理的选择。 如果使用HashMap是最有效的方法,如何在代码中构造和使用HashMap? 这是我尝试过的: 问题答案: 遍
我目前试图通过反射执行一个方法,但方法参数只是一个列表。 该方法如下所示: 但Java对待他们就像 问题是参数的长度不同,该方法可以有任意数量的参数。 有没有办法解决这个问题?
我想在全局范围内使用一个数组,以便能够用不同的方法修改它,并在最后用主调用方法
问题内容: 对不起任何较小的语法错误或其他错误,我正在使用Jitsi模块进行此操作,并且对Java不太熟悉,因此想确认正在发生的事情以及为什么以及如何对其进行修复。 使用按名称加载类方法创建类B的实例时,应用程序正在执行此操作: 在类B中调用重写的load() 初始化变量(根据调试器调用“私有字符串testString = null”),将其无效。 这是预期的Java行为吗?是什么原因造成的?它是
a = [i for i in range(1, 8000)] 假如有个这样的列表, 我需要把里面的所有值组合 然后求 组合的总和与100差的最小值。 例如 1和2组合 1+2 =3 与100 差 3-100 == -97 , 1和3组合 1+3-100 = -96 , 1和4组合,1+4-100=-95..... 1+99-100=0 ....依次类推, 1+2+3+4+5+6...+7999-
本文向大家介绍pandas 使用apply同时处理两列数据的方法,包括了pandas 使用apply同时处理两列数据的方法的使用技巧和注意事项,需要的朋友参考一下 多的不说,看了代码就懂了! 以上这篇pandas 使用apply同时处理两列数据的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。