Es util siempre utilizar Set en lugar de List en los casos en los que no importa tanto el orden con el que se recorren ciertos elementos sino la unicidad de los mismos.
Lo que obtienen es una lista de Paths. Un Path, segun neo4j, es el camino desde el nodo inicial hasta el nodo final, con todas las relaciones listadas y nodos intermedios. Ustedes al hacer path.nodes basicamente obtienen TODOS los nodos para en un Path dado y los agregan a la lista resultados. Eso casualmente es lo que ocasiona el problema de duplicidad.
Imaginen un grafo muy sencillo
A -> B -> C
-> D
Si arrancan desde A van a obtener los siguientes Paths
A -> B
A -> B -> C
A -> B -> D
si agregan todos los nodos de cada path a una lista, terminan con:
[A, B, A, B, C, A, B, D]
La forma mas sencilla de resolver eso es pedirle a Neo4j que nos devuelva el mismo la coleccion de todos los nodos alcanzados, en lugar de los paths
Aca surgen varias observaciones:
Lo que obtienen es una lista de Paths. Un Path, segun neo4j, es el camino desde el nodo inicial hasta el nodo final, con todas las relaciones listadas y nodos intermedios. Ustedes al hacer
path.nodes
basicamente obtienen TODOS los nodos para en un Path dado y los agregan a la lista resultados. Eso casualmente es lo que ocasiona el problema de duplicidad.Imaginen un grafo muy sencillo
A -> B -> C -> D
Si arrancan desde A van a obtener los siguientes Paths A -> B A -> B -> C A -> B -> D
si agregan todos los nodos de cada path a una lista, terminan con: [A, B, A, B, C, A, B, D]
La forma mas sencilla de resolver eso es pedirle a Neo4j que nos devuelva el mismo la coleccion de todos los nodos alcanzados, en lugar de los paths
(fijense casi al final de esta docu http://neo4j.com/docs/stable/tutorial-traversal-java-api.html)