public <S> Set<S> filterFollowers(Nfa<S> nfa, Iterable<S> followers, Predicate<S> filter) { Set<S> result = Sets.newLinkedHashSet(); for (S follower : followers) collectFollowers(nfa, follower, result, Sets.<S> newHashSet(), filter); return result; }
public <S> Set<S> filterFollowers(Nfa<S> nfa, Iterable<S> followers, Predicate<S> filter) { Set<S> result = Sets.newHashSet(); for (S follower : followers) collectFollowers(nfa, follower, result, Sets.<S> newHashSet(), filter); return result; }
protected <S> void collectFollowers(Nfa<S> nfa, S owner, Set<S> result, Set<S> visited, Predicate<S> filter) { if (!visited.add(owner)) return; if (filter.apply(owner)) { result.add(owner); return; } for (S follower : nfa.getFollowers(owner)) collectFollowers(nfa, follower, result, visited, filter); }
protected <S> void collectFollowers(Nfa<S> nfa, S owner, Set<S> result, Set<S> visited, Predicate<S> filter) { if (!visited.add(owner)) return; if (filter.apply(owner)) { result.add(owner); return; } for (S follower : nfa.getFollowers(owner)) collectFollowers(nfa, follower, result, visited, filter); }