public Set<PhysicalTable> filter(Collection<PhysicalTable> candidateTables,List<PhysicalTableMatcher> matchers) throws NoMatchFoundException {
  Collection<PhysicalTable> currentMatches=candidateTables;
  for (  PhysicalTableMatcher matcher : matchers) {
    currentMatches=matcher.matchNotEmpty(currentMatches.stream());
  }
  return new LinkedHashSet<>(currentMatches);
}

public Set < PhysicalTable > filter ( Collection < PhysicalTable > candidateTables , List < PhysicalTableMatcher > matchers ) throws NoMatchFoundException { Collection < PhysicalTable > currentMatches = candidateTables ; for ( PhysicalTableMatcher matcher : matchers ) { currentMatches = matcher . matchNotEmpty ( currentMatches . stream ( ) ) ; } return new LinkedHashSet < > ( currentMatches ) ; }
filter a list of tables through each matcher using a list of matchers sequentially .
