docs: public static <T> void randomSample(Collection<T> source, Collection<T> dest, int samples, Random rand)
      {
          if(samples > source.size())
              throw new IllegalArgumentException("Can not obtain a number of samples larger than the source population");
          else if(samples <= 0)
              throw new IllegalArgumentException("Sample size must be positive");
          //Use samples to keep track of how many more samples we need
          int remainingPopulation = source.size();
          for(T member : source)
          {
              if(rand.nextInt(remainingPopulation) < samples)
              {
                  dest.add(member);
                  samples--;
              }
              remainingPopulation--;
          }
      }