private void processWalksFromSource(int source, ArrayList<Walk> walksFromSource) {
        // Now sort by target
        Collections.sort(walksFromSource, new Comparator<Walk>() {
            @Override
            public int compare(Walk walk1, Walk walk2) {
                int dest1 = walk1.getDestination();
                int dest2 = walk2.getDestination();
                return (dest1 == dest2 ?  0  : (dest1 < dest2 ? -1 : 1)) ;
            }
        });

        // Group by target
        int curDest = -1;
        ArrayList<Walk> curSet = new ArrayList<Walk>();
        for(Walk w : walksFromSource) {
            if (w.getDestination() != curDest) {
                if (curDest != -1) handleSourcePathSet(source, curDest, curSet);
                curDest = w.getDestination();
                curSet = new ArrayList<Walk>();
            }
            curSet.add(w);
        }
    }