code: public static CharIterator oF(final Supplier<char[]> arraySupplier) {
          N.checkArgNotNull(arraySupplier, "arraySupplier");
  
          return new CharIterator() {
              private char[] aar = null;
              private int len = 0;
              private int cur = 0;
              private boolean isInitialized = false;
  
              @Override
              public boolean hasNext() {
                  if (isInitialized == false) {
                      init();
                  }
  
                  return cur < len;
              }
  
              @Override
              public char nextChar() {
                  if (isInitialized == false) {
                      init();
                  }
  
                  if (cur >= len) {
                      throw new NoSuchElementException();
                  }
  
                  return aar[cur++];
              }
  
              private void init() {
                  if (isInitialized == false) {
                      isInitialized = true;
                      aar = arraySupplier.get();
                      len = N.len(aar);
                  }
              }
          };
      }
docs: Lazy evaluation.
  
  @param arraySupplier
  @return