sample() {
/**
* Returns how many items should the algorithm skip given its state.
*
- * The implementation of this method must only rely on the given arguments and not on the state of the instance.
+ * The implementation of this method relies on the given arguments and not on the state of the instance.
*
* @param streamSize how many items have been fed to the sampler
* @param sampleSize expected sample size
* @param random the {@link Random} instance to use
* @return how many items to skip
*/
- abstract long skipLength(long streamSize, int sampleSize, Random random);
+ protected abstract long skipLength(long streamSize, int sampleSize, Random random);
/**
* Performs initialization logic.
@@ -189,6 +195,6 @@ public Collection sample() {
* @param sampleSize expected sample size
* @param random the {@link Random} instance assigned to this instance
*/
- void init(int sampleSize, Random random) {
+ protected void init(int sampleSize, Random random) {
}
}
diff --git a/src/main/java/gr/james/sampling/LiLSampling.java b/src/main/java/gr/james/sampling/LiLSampling.java
index efb53fb..6800f45 100644
--- a/src/main/java/gr/james/sampling/LiLSampling.java
+++ b/src/main/java/gr/james/sampling/LiLSampling.java
@@ -60,14 +60,28 @@ public static RandomSamplingCollector collector(int sampleSize, Random ra
return new RandomSamplingCollector<>(() -> new LiLSampling<>(sampleSize, random));
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ */
@Override
- void init(int sampleSize, Random random) {
+ protected void init(int sampleSize, Random random) {
// W = Math.exp(Math.log(RandomSamplingUtils.randomExclusive(random)) / sampleSize);
W = Math.pow(RandomSamplingUtils.randomExclusive(random), 1.0 / sampleSize);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param streamSize {@inheritDoc}
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ * @return {@inheritDoc}
+ */
@Override
- long skipLength(long streamSize, int sampleSize, Random random) {
+ protected long skipLength(long streamSize, int sampleSize, Random random) {
final double random1 = RandomSamplingUtils.randomExclusive(random);
final double random2 = RandomSamplingUtils.randomExclusive(random);
long skip = (long) (Math.log(random1) / Math.log(1 - W));
diff --git a/src/main/java/gr/james/sampling/VitterXSampling.java b/src/main/java/gr/james/sampling/VitterXSampling.java
index f9fe125..1080703 100644
--- a/src/main/java/gr/james/sampling/VitterXSampling.java
+++ b/src/main/java/gr/james/sampling/VitterXSampling.java
@@ -56,8 +56,16 @@ public static RandomSamplingCollector collector(int sampleSize, Random ra
return new RandomSamplingCollector<>(() -> new VitterXSampling<>(sampleSize, random));
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param streamSize {@inheritDoc}
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ * @return {@inheritDoc}
+ */
@Override
- long skipLength(long streamSize, int sampleSize, Random random) {
+ protected long skipLength(long streamSize, int sampleSize, Random random) {
streamSize++;
final double r = random.nextDouble();
diff --git a/src/main/java/gr/james/sampling/VitterZSampling.java b/src/main/java/gr/james/sampling/VitterZSampling.java
index b98f326..d1de0aa 100644
--- a/src/main/java/gr/james/sampling/VitterZSampling.java
+++ b/src/main/java/gr/james/sampling/VitterZSampling.java
@@ -58,13 +58,27 @@ public static RandomSamplingCollector collector(int sampleSize, Random ra
return new RandomSamplingCollector<>(() -> new VitterZSampling<>(sampleSize, random));
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ */
@Override
- void init(int sampleSize, Random random) {
+ protected void init(int sampleSize, Random random) {
W = Math.pow(random.nextDouble(), -1.0 / sampleSize);
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param streamSize {@inheritDoc}
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ * @return {@inheritDoc}
+ */
@Override
- long skipLength(long streamSize, int sampleSize, Random random) {
+ protected long skipLength(long streamSize, int sampleSize, Random random) {
double term = streamSize - sampleSize + 1;
while (true) {
// Generate U and X
diff --git a/src/main/java/gr/james/sampling/WatermanSampling.java b/src/main/java/gr/james/sampling/WatermanSampling.java
index 6d7cfd6..f941dd6 100644
--- a/src/main/java/gr/james/sampling/WatermanSampling.java
+++ b/src/main/java/gr/james/sampling/WatermanSampling.java
@@ -56,8 +56,16 @@ public static RandomSamplingCollector collector(int sampleSize, Random ra
return new RandomSamplingCollector<>(() -> new WatermanSampling<>(sampleSize, random));
}
+ /**
+ * {@inheritDoc}
+ *
+ * @param streamSize {@inheritDoc}
+ * @param sampleSize {@inheritDoc}
+ * @param random {@inheritDoc}
+ * @return {@inheritDoc}
+ */
@Override
- long skipLength(long streamSize, int sampleSize, Random random) {
+ protected long skipLength(long streamSize, int sampleSize, Random random) {
streamSize++;
long skipCount = 0;
while (random.nextDouble() * streamSize >= sampleSize && streamSize > 0) {