code: protected <E> E doSearch(final List<E> list) {
      if (!list.isEmpty()) {
        int matchIndex = (list.size() / 2);
        E element = list.get(matchIndex);
        int matchResult = getMatcher().match(element);
  
        if (matchResult == 0) {
          return element;
        }
        else if (matchResult < 0) {
          return doSearch(list.subList(0, matchIndex));
        }
        else {
          return doSearch(list.subList(matchIndex + 1, list.size()));
        }
      }
  
      return null;
    }
docs: Performs the actual (binary) search of an ordered collection (List) of elements in search of a single element
  matching the criteria defined by the Matcher.
  
  @param <E> the Class type of the elements in the List.
  @param list the List of elements to search.
  @return a single element of the List matching the criteria defined by the Matcher or null if no element in the List
  matches the criteria defined by the Matcher.
  @see #getMatcher()
  @see #search(java.util.Collection)
  @see java.util.List