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