Using streams to apply different functions on key value pair depending on keys

DsCpp :

Currently the code use plain old foreach loop

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..
  }
}

And I'm trying to achieve something like

someHashMap.entrySet().stream().apply((key,value) -> if preEvalObj.equals(key) lambda1 else lambda2)

Can I use streams to achieve my goal?

Naman :

One possible way(not using streams though) could be to iterate over the key, value pair (BiConsumer implementation) as:

someHashMap.forEach((key, value) -> {
    if (preEvalObj.equals(key)) {
        someOpsOnValue(); // lambda1Onvalue
    } else {
        someOtherOpsOnValue(); // lambda2lambda1Onvalue
    }
});

or the same expressed as a little more readable at least IMHO

BiConsumer<String, Float> biConsumer = (key, value) -> {
    if (key.equals("123")) { // preEvalObj
       someOpsOnValue(); // lambda1Onvalue
    } else {
       someOtherOpsOnValue(); // lambda2lambda1Onvalue..
    }
};

someHashMap.forEach(biConsumer);

Side note, the constructor is redundant for String initialisation -

String preEvalObj = "123";

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=71135&siteId=1