code: @NotNull
      public Optional<IntPair<T>> findIndexed(
              int from, int step,
              @NotNull IndexedPredicate<? super T> predicate) {
          int index = from;
          while (iterator.hasNext()) {
              final T value = iterator.next();
              if (predicate.test(index, value)) {
                  return Optional.of(new IntPair<T>(index, value));
              }
              index += step;
          }
          return Optional.empty();
      }
docs: Finds the first element and its index that matches the given predicate.
  
  <p>This is a short-circuiting terminal operation.
  
  <p>Example:
  <pre>
  from: 0
  step: 10
  predicate: (index, value) -&gt; index + value == 42
  stream: [1, 11, 22, 12, 40]
  index:  [0, 10, 20, 30, 40]
  result: Optional.of(IntPair(20, 22))
  </pre>
  
  @param from  the initial value of the index (inclusive)
  @param step  the step of the index
  @param predicate  the predicate to find value
  @return an {@code Optional} with {@code IntPair}
  or {@code Optional.empty()} if stream is empty or no value was found.
  @since 1.1.8