Ниже приведен обязательный способ объединить 2 значения Object2IntOpenHashMap.
val foo = new Object2IntOpenHashMap[String]
foo.put("foo", 1)
val bar = new Object2IntOpenHashMap[String]
bar.put("foo", 1)
bar.put("bar", 1)
bar.keySet().forEach(x => {
val barValue = bar.getInt(x)
foo.computeInt(x , (_, v) => if(v == null) barValue else barValue + v)
})
println(foo)
Приведенное выше println(foo)
напечатает {bar=>1, foo=>2}
.
Но если вы хотите более функциональный способ, вам следуетиспользуйте более функциональные ибриры, такие как кошки или скалаз.Я сделал это, используя кошек -
import cats.Semigroup
import cats.implicits._
import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap
implicit val Object2IntOpenHashMapSemiGroup = new Semigroup[Object2IntOpenHashMap[String]] {
override def combine(x: Object2IntOpenHashMap[String], y: Object2IntOpenHashMap[String]): Object2IntOpenHashMap[String] = {
val result: Object2IntOpenHashMap[String] = y.clone()
x.keySet().forEach(x => {
val barValue = y.getInt(x)
result.computeInt(x , (_, v) => if(v == null) barValue else barValue +v)
})
result
}
}
println(foo combine bar)
println(Object2IntOpenHashMapSemiGroup.combine(foo, bar))
Вы получите тот же результат, что и раньше.Вы можете увидеть документацию здесь для полугруппы здесь .