@Override
Graph<V, E> doFilter(@Nullable final Predicate<V> vertexFilter,
@Nullable final Predicate<Edge<V, E>> edgeFilter) {
final Predicate<V> newVertexFilter = this.vertexFilter == null ? vertexFilter
: vertexFilter == null ? this.vertexFilter : Predicates.and(this.vertexFilter,
vertexFilter);
final Predicate<Edge<V, E>> newEdgeFilter = this.edgeFilter == null ? edgeFilter
: edgeFilter == null ? this.edgeFilter : Predicates.and(this.edgeFilter,
edgeFilter);
return new FilteredGraph<V, E>(this.graph, newVertexFilter, newEdgeFilter);
}