GitHub user okram opened a pull request:
https://github.com/apache/incubator-tinkerpop/pull/284
TINKERPOP-1237: ProjectMap: For the Love of Die Faterland
https://issues.apache.org/jira/browse/TINKERPOP-1237
Added `GraphTraversal.project()` which allows is like the inverse of `select()`. Instead of pulling from this path history, you are pushing into the future. While this can be done with `match()`, `ProjectStep` does not require `LABELED_PATHS` and thus, is more efficient (though, its constrained to local children `by()`-modulation).
EXAMPLE:
```
gremlin> g.V().out("created").
project("a","b").
by("name").
by(in("created").count()).
order().by(select("b"),decr).
select("a")
==>lop
==>lop
==>lop
==>ripple
```
CHANGELOG
```
- Added `GraphTraversal.project()` to allow projecting out a `Map<String,E>` given the current traverser and an arbitrary number of `by()`-modulators.
```
Docs build, `mvn clean install` and Giraph (at `ProjectTest`) tested.
VOTE +1.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/incubator-tinkerpop TINKERPOP-1237
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/incubator-tinkerpop/pull/284.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #284
commit d90be26f1625e376e93ce91adcff725de836a8e5
Author: Marko A. Rodriguez <okrammarko@gmail.com>
Date: 2016-03-29T17:44:52Z
Added ProjectStep and GraphTraversal.project() which is like select(), but on the current traverser, not history data. As such, it does not require path-computations, though its by()-modulators are local children. Added test cases and updated docs.
This ticket should also add by()-modulation TraversalRings to PropertyMapStep. Also, if still efficient, PropertyMapStep should extend ProjectStep and thus, the concept of "forward projection" is born.
A whole new dimension of thinking here. This categorization of steps is orthogonal to the map, flatMap, filter, sideEffect categorization.