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