code: @NonNull
      public Triple<Boolean, Item, Integer> recursive(AdapterPredicate<Item> predicate, boolean stopOnMatch) {
          return recursive(predicate, 0, stopOnMatch);
      }
docs: util function which recursively iterates over all items and subItems of the given adapter.
  It executes the given `predicate` on every item and will either stop if that function returns true, or continue (if stopOnMatch is false)
  
  @param predicate   the predicate to run on every item, to check for a match or do some changes (e.g. select)
  @param stopOnMatch defines if we should stop iterating after the first match
  @return Triple&lt;Boolean, IItem, Integer&gt; The first value is true (it is always not null), the second contains the item and the third the position (if the item is visible) if we had a match, (always false and null and null in case of stopOnMatch == false)