Использование потоков для применения различных функций к паре ключ-значение в зависимости от ключей - PullRequest
0 голосов
/ 03 сентября 2018

В настоящее время код использует простой старый цикл 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)

Могу ли я использовать потоки для достижения своей цели?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Используя ответ @ nullpointer, если целью является изменение значений, вы можете сделать это следующим образом

myHashMap.entrySet().stream().forEach(e -> {
      if (!e.getKey().equals(trigger))
          e.setValue(setNewValue);
      else
          e.setValue(setOtherNewValue);
  });
}
0 голосов
/ 03 сентября 2018

Один из возможных способов (хотя и не использует потоки) может заключаться в итерации по паре ключ-значение (реализация 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...