Мне нужно очень эффективно сравнить две карты в Clojure / Java и вернуть разницу, определенную в Java .equals (..), с nil / null, эквивалентным «not present».
т.е.Я ищу наиболее эффективный способ написания такой функции, как:
(map-difference
{:a 1, :b nil, :c 2, :d 3}
{:a 1, :b "Hidden", :c 3, :e 5})
=> {:b nil, :c 2, :d 3, :e nil}
Я бы предпочел неизменную карту Clojure в качестве вывода, но карта Java также подойдет, если повышение производительности будет значительным.
Для чего бы это ни стоило, мой основной тестовый пример / ожидание поведения состоит в том, что следующее будет равным (вплоть до эквивалентности null = "Не присутствует") для любых двух карт a и b:
a
(merge b (difference a b))
Как лучше всего это реализовать?