Я думаю, вы хотите использовать дополнительное отображение:
xpath(xml, ~x"//A/B"l, number: ~x"text()")
|> Enum.map(fn %{number: number} -> number end)
Вывод:
['23', '34', nil]
Вы используете Java Параллельный HashMap? От набора ключей () документация это, кажется, ведет себя способом, который Вы нашли бы полезным.
Возвращает представление набора ключей, содержавшихся в этой карте. Набор поддерживается картой, таким образом, изменения в карте отражаются в наборе, и наоборот. Набор поддерживает удаление элемента, которое удаляет соответствующее отображение из этой карты, через Iterator.remove, Set.remove, removeAll, retainAll, и четкие операции. Это не поддерживает добавление или addAll операции. Возвращенный итератор представления является "слабо последовательным" итератором, который никогда не будет бросать ConcurrentModificationException и гарантирует, что пересек элементы, поскольку они существовали на конструкцию итератора, и может (но не гарантироваться), отражают любые модификации, последующие за конструкцией.
т.е. можно удалить материал, и необходимо быть в порядке.
Если Вы не используете эту реализацию, то, которые являются Вами использование (и почему? Не будучи забавным, но было бы интересно знать, почему Вы сделали тот выбор),
Если кэш LRU будет отвечать всем требованиям достаточно хорошо для Вас, проверить LinkedHashMap — он делает реализацию кэша LRU тривиальной, и затем можно сделать результаты ориентированными на многопотоковое исполнение путем обертывания его с вызовом к Collections.synchronizedMap.