当前代码使用普通的foreach循环
String preEvalObj = new String("123");
for(Map.Entry<String, Float> entry : someHashMap.entrySet()){
String key = entry.getKey();
Float value = entry.getValue();
if(preEvalObj.equals(key)){
lambda1Onvalue...
}else{
lambda2lambda1Onvalue..
}
}
我正在努力实现类似的目标
someHashMap.entrySet().stream().apply((key,value) -> if preEvalObj.equals(key) lambda1 else lambda2)
我可以使用流来实现自己的目标吗?
答案 0 :(得分:3)
一种可能的方式(虽然不使用流)可以迭代键,值对(BiConsumer
实现),如下所示:
someHashMap.forEach((key, value) -> {
if (preEvalObj.equals(key)) {
someOpsOnValue(); // lambda1Onvalue
} else {
someOtherOpsOnValue(); // lambda2lambda1Onvalue
}
});
或至少以恕我直言表达的可读性相同
BiConsumer<String, Float> biConsumer = (key, value) -> {
if (key.equals("123")) { // preEvalObj
someOpsOnValue(); // lambda1Onvalue
} else {
someOtherOpsOnValue(); // lambda2lambda1Onvalue..
}
};
someHashMap.forEach(biConsumer);
旁注,该构造函数对于String
初始化是多余的-
String preEvalObj = "123";
答案 1 :(得分:0)
使用@nullpointer的答案,如果目标是更改值,则可以这样
myHashMap.entrySet().stream().forEach(e -> {
if (!e.getKey().equals(trigger))
e.setValue(setNewValue);
else
e.setValue(setOtherNewValue);
});
}