Java 8 是否可以匹配映射的多个键而不是forEach中的IF语句?
我试图通过将键与字符串匹配来过滤映射并提取值。映射为,值可以是字符串或列表。下面是代码片段-Java 8 是否可以匹配映射的多个键而不是forEach中的IF语句?,java-8,hashmap,java-stream,Java 8,Hashmap,Java Stream,我试图通过将键与字符串匹配来过滤映射并提取值。映射为,值可以是字符串或列表。下面是代码片段- container.forEach((k, v) -> { if (("userId").equals(k)) registerContainer.setUserId(v.toString()); if (("languageId").equals(k)) registerContain
container.forEach((k, v) -> {
if (("userId").equals(k))
registerContainer.setUserId(v.toString());
if (("languageId").equals(k))
registerContainer.setUserLanguage(v.toString());
if (("formDetails").equals(k)) {
registerContainer.setFields((ArrayList) v);
}
if (("value1").equals(k)) {
HashMap fieldEntry = new LinkedHashMap<>();
fieldEntry.put("fieldKey", k);
fieldEntry.put("fieldValue", v.toString());
masterParams.add(fieldEntry);
}
if (("value2").equals(k)) {
HashMap fieldEntry = new LinkedHashMap<>();
fieldEntry.put("fieldKey", k);
fieldEntry.put("fieldValue", v.toString());
masterParams.add(fieldEntry);
}
if (!CollectionUtils.isEmpty(params)) {
registerContainer.setFields(masterParams);
}
});
container.forEach((k,v)->{
如果((“用户ID”)等于(k))
setUserId(v.toString());
if((“languageId”).等于(k))
setUserLanguage(v.toString());
如果((“formDetails”).等于(k)){
registerContainer.setFields((ArrayList)v);
}
如果((“值1”)等于(k)){
HashMap fieldEntry=新建LinkedHashMap();
fieldEntry.put(“fieldKey”,k);
fieldEntry.put(“fieldValue”,v.toString());
主参数添加(字段输入);
}
如果((“值2”)等于(k)){
HashMap fieldEntry=新建LinkedHashMap();
fieldEntry.put(“fieldKey”,k);
fieldEntry.put(“fieldValue”,v.toString());
主参数添加(字段输入);
}
如果(!CollectionUtils.isEmpty(params)){
registerContainer.setFields(主参数);
}
});
我的问题是,有没有一种方法可以消除所有的if语句,并且仍然能够得到期望的结果
提前感谢。您可以通过使用
开关
语句和挤压value1
和value2
的代码来简化它,因为两者都做相同的事情。
所以像这样的事情:
container.forEach((k, v) -> {
switch(k){
case "userId":
registerContainer.setUserId(v.toString());
break;
case "languageId":
registerContainer.setUserLanguage(v.toString());
break;
case "formDetails":
registerContainer.setFields((ArrayList) v);
break;
case "value1":
case "value2":
HashMap fieldEntry = new LinkedHashMap<>();
fieldEntry.put("fieldKey", k);
fieldEntry.put("fieldValue", v.toString());
masterParams.add(fieldEntry);
break;
}
});
if (!CollectionUtils.isEmpty(params)) {
registerContainer.setFields(masterParams);
}
container.forEach((k,v)->{
开关(k){
案例“userId”:
setUserId(v.toString());
打破
案例“languageId”:
setUserLanguage(v.toString());
打破
案例“formDetails”:
registerContainer.setFields((ArrayList)v);
打破
案例“value1”:
案例“价值2”:
HashMap fieldEntry=新建LinkedHashMap();
fieldEntry.put(“fieldKey”,k);
fieldEntry.put(“fieldValue”,v.toString());
主参数添加(字段输入);
打破
}
});
如果(!CollectionUtils.isEmpty(params)){
registerContainer.setFields(主参数);
}
或使用Java 8:
container.entrySet().stream().filter(e -> e.getKey().equals("value1")).findFirst()
.ifPresent(e -> {
System.out.println(e.getValue());
});
当您对
(“value1”).equals(k)
和(“value2”).equals(k)
执行完全相同的操作时,您可以使用单个if(“value1”).equals(k)| |“value2”。equals(k)){……
。除此之外,如果(!CollectionUtils.isEmpty(params)){registerContainer.setFields(masterParams);}不应该对每个元素执行操作,而应该在forEach
操作后执行一次。而params
应该是masterParams
?