On Sat, 5 Aug 2017 09:47:20 -0700, Gary Gregory wrote:
On Fri, Aug 4, 2017 at 1:59 PM, Gilles <gil...@harfang.homelinux.org> wrote:


Hi Gary.

On Fri, 4 Aug 2017 11:10:57 -0700, Gary Gregory wrote:

For example, I have a enum like:

public enum CardinalDirection (NORTH,SOUTH,EAST,WEST)

and I want to say

traveler.travel(nextRandomDirection());

where

public CardinalDirection nextRandomDirection() {
   return rng.next(CardinalDirection.class);
}


Actually, "Commons RNG" already provides all the necessary functionality
for a one-liner:

---CUT---
import java.util.Arrays;
import org.apache.commons.rng.simple.RandomSource;
import org.apache.commons.rng.sampling.CollectionSampler;

CollectionSampler<CardinalDirection> r
= new CollectionSampler<>(RandomSource.create(RandomSource.SPLIT_
MIX_64),
Arrays.asList(CardinalDirection.values()));

CardinalDirection e = r.sample();
---CUT---


Very nice, thank you.

I can see a wrapper for this boilerplate though:

public class RandomEnum<E> {

private final Class<E> enumClass;
private final CollectionSampler<CellDirection> rng;

public RandomEnum(final Class<E> enumClass) {
super();
this.enumClass = enumClass;
this.rng = new
CollectionSampler<>(RandomSource.create(RandomSource.SPLIT_MIX_64),
Arrays.asList(CellDirection.values()));

}

public CellDirection next() {
return rng.sample();
}

@Override
public String toString() {
return "RandomEnum [rng=" + rng + ", enumClass=" + enumClass + "]";
}
}

I guess there is a mix of generics and "specifics" here (cf.
"CellDirection"). And if you have only have a generic "E" in
that class, you won't be able to call "E.values()".
Then see also my other post:
  http://markmail.org/message/h63yb7ozk4nyjagj

However, what does one gain with having to call this one-liner:
  RandomEnum<SomeEnum> r =
      new RandomEnum<SomeEnum>(SomeEnum.class,
RandomSource.create(RandomSource.SPLIT_MIX_64));
vs the one I've suggested above?

Gilles

[...]

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to