code: public void recycle(RecyclePosition position) {
  
          stubCount = determineStubCount();
  
          switch (position) {
              case BOTTOM:
                  if (hasRecycledWidgets()) {
                      // Will remove the  current recycled widgets
                      remove(getRecycledWidgets().stream()
                              .skip(0)
                              .limit((parent.getLimit() * (currentIndex + 1)) - stubCount)
                              .collect(Collectors.toList()));
  
                      currentIndex++;
  
                      // Will determine if the current index is greater than the load index then we need to recycle the next
                      // set of recycled widgets
                      if (currentIndex < loadIndex) {
                          add(getRecycledWidgets(currentIndex));
                      }
                  }
                  break;
              case TOP:
                  if (currentIndex > 0) {
                      // Will remove the current recycled widgets
                      remove(getRecycledWidgets(currentIndex));
  
                      // Will add the previous recycled widgets
                      int skip = ((parent.getLimit() * currentIndex) - parent.getLimit()) - stubCount;
                      insert(getRecycledWidgets().stream()
                              .skip(skip < 0 ? 0 : skip)
                              .limit(parent.getLimit())
                              .collect(Collectors.toList()));
  
                      currentIndex--;
                  }
                  break;
          }
      }
docs: Will recycle the provided widgets (@link widgets} with provided {@link RecyclePosition}