protected void applyTraversalRingToMap(Map<Object, Object> map){
        if (this.valueTraversal != null) {
            // will cop a ConcurrentModification if a key is dropped so need this little copy here
            final List<Object> keys = new ArrayList<>(map.keySet());
            for (final Object key : keys) {
                map.compute(key, (k, v) -> {
                    final TraversalProduct product = TraversalUtil.produce(v, (Traversal.Admin) this.valueTraversal);

                    // compute() should take the null and remove the key
                    return product.isProductive() ? product.get() : null;
                });
            }
        }
    }
@author Marko A. Rodriguez (http://markorodriguez.com)
@author Daniel Kuppitz (http://gremlin.guru)
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertyMapStep.java