code: public static <T> int firstIndexOf(Collection<T> items, Predicate<T> predicate) {
          if (!isEmpty(items)) {
              int index = 0;
              for (T item : items) {
                  if (predicate.apply(item)) {
                      return index;
                  }
  
                  index++;
              }
          }
  
          return NOT_FOUND_INDEX;
      }
docs: Returns the index of the first element in a collection that matches the given predicate.
  Returns {#NOT_FOUND_INDEX} if no element matches the given predicate.
  
  @param items source items
  @param predicate predicate function
  @param <T> type of elements in the source collection
  @return index of the first element that matches the given predicate or {#NOT_FOUND_INDEX} if no element matches
  the given predicate