docs: public static <T> T getAt(Iterator<T> self, int idx) {
          if (idx < 0) {
              // calculate whole list in this case
              // recommend avoiding -ve's as this is not as efficient
              List<T> list = toList(self);
              int adjustedIndex = idx + list.size();
              if (adjustedIndex < 0 || adjustedIndex >= list.size()) return null;
              return list.get(adjustedIndex);
          }
  
          int count = 0;
          while (self.hasNext()) {
              if (count == idx) {
                  return self.next();
              } else {
                  count++;
                  self.next();
              }
          }
  
          return null;
      }