- final MapNode map = (MapNode) node;
- if (nodePredicates.isEmpty() || current == null) {
- final Iterable<MapEntryNode> value = map.getValue();
- for (final MapEntryNode mapEntryNode : value) {
- final Optional<DataContainerChild<?, ?>> child = mapEntryNode.getChild(pathArgument);
- if (child.isPresent()) {
- addNextValues(values, child.get(), next.getQNamePredicates(), path, current);
- } else {
- for (final ChoiceNode choiceNode : getChoiceNodes(mapEntryNode)) {
- addValues(values, choiceNode, next.getQNamePredicates(), path, current);
- }
+ Stream<MapEntryNode> entries = ((MapNode) node).getValue().stream();
+ if (!nodePredicates.isEmpty() && current != null) {
+ entries = entries.filter(createMapEntryPredicate(nodePredicates, current));
+ }
+
+ entries.forEach(mapEntryNode -> {
+ final Optional<DataContainerChild<?, ?>> child = mapEntryNode.getChild(pathArgument);
+ if (child.isPresent()) {
+ addNextValues(values, child.get(), next.getQNamePredicates(), path, current);
+ } else {
+ for (final ChoiceNode choiceNode : getChoiceNodes(mapEntryNode)) {
+ addValues(values, choiceNode, next.getQNamePredicates(), path, current);