public <S, P, D extends Pda<S, P>> Map<S, S> mapPopAndPush(Pda<S, P> pda) { Map<P, Pair<S, S>> popsAndPushs = collectPopsAndPushs(pda); Map<S, S> result = Maps.newLinkedHashMap(); for (Pair<S, S> p : popsAndPushs.values()) { S push = p.getFirst(); S pop = p.getSecond(); if (push != null && pop != null) { result.put(push, pop); result.put(pop, push); } } return result; }