private void initialize() {

		//
		// Basic Algorithm
		// 1) Filter the entire universe of vertices/edges
		// 2) Get current vertices/edges that need to be removed (this happens by simply
		//    not restoring those vertices/edges that are already filtered)
		// 3) Restore any filtered vertices that now pass the filter 
		//

		// 1)
		//@formatter:off
		Iterator<V> vertices = filterGraph.getAllVertices();
		Set<V> matching = asStream(vertices)			
			.filter(filter)
			.collect(Collectors.toSet())
	        ;
		//@formatter:on

		Set<V> related = filterGraph.getAllReachableVertices(matching);
		matching.addAll(related);
		passedVertices = matching;

		// 2)
		failedVertices = findCurrentVerticesFailingTheFilter(matching);
		failedEdges = filterGraph.getAllEdges(failedVertices);

		Set<E> allRelatedEdges = filterGraph.getAllEdges(passedVertices);
		allRelatedEdges.removeAll(failedEdges);
		passedEdges = allRelatedEdges;

		// 3)
		filterGraph.unfilterVertices(passedVertices);
	}
Constructor

@param viewer the viewer upon which to operate
@param graph the graph to filter
@param filter the predicate used to determine what passes the filter
@param remove true signals to remove the vertices from the view; false signals to leave
              them visible, but faded to show that they failed the filter
Ghidra/Framework/Graph/src/main/java/ghidra/graph/job/FilterVerticesJob.java