Re: [RNG] Generating for enums
Yeah, sorry, I forgot about the hard coded enuf. Gary On Aug 5, 2017 11:37 AM, "Gilles"wrote: > On Sat, 5 Aug 2017 09:47:20 -0700, Gary Gregory wrote: > >> On Fri, Aug 4, 2017 at 1:59 PM, Gilles >> 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 r >>> = new CollectionSampler<>(RandomSource.create(RandomSource.SPLIT_ >>> MIX_64), >>> Arrays.asList(CardinalDirectio >>> n.values())); >>> >>> CardinalDirection e = r.sample(); >>> ---CUT--- >>> >>> >> Very nice, thank you. >> >> I can see a wrapper for this boilerplate though: >> >> public class RandomEnum { >> >> private final Class enumClass; >> private final CollectionSampler rng; >> >> public RandomEnum(final Class 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 r = > new RandomEnum(SomeEnum.class, >RandomSource.create(RandomSou > rce.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 > >
Re: [RNG] Generating for enums
On Sat, 5 Aug 2017 09:47:20 -0700, Gary Gregory wrote: On Fri, Aug 4, 2017 at 1:59 PM, Gilleswrote: 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 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 { private final Class enumClass; private final CollectionSampler rng; public RandomEnum(final Class 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 r = new RandomEnum(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
Re: [RNG] Generating for enums
On Fri, Aug 4, 2017 at 1:59 PM, Gilleswrote: > 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 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 { private final Class enumClass; private final CollectionSampler rng; public RandomEnum(final Class 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 + "]"; } } Gary > > Cheers, > Gilles > > > >> Gary >> >> On Fri, Aug 4, 2017 at 11:02 AM, Amey Jadiye >> wrote: >> >> Hi, >>> >>> What's usecase for this BTW ? Might be unaware about requirement but this >>> forced me to think why would someone need random enum ? >>> >>> Enums are generally "limited" immutable constants and people choose enum >>> over the array of constants for good reason, however random provider >>> seems >>> best suited for choosing value from any Data-Structure holding "lot" of >>> values. >>> >>> I think it's little weird but I would be happy if someone explain >>> advantages. :-) >>> >>> Regards, >>> Amey >>> >>> On Fri, Aug 4, 2017, 11:17 PM Gary Gregory >>> wrote: >>> >>> > Hi All, >>> > >>> > Any thoughts on generation when you want to the domain to be an enum? >>> > >>> > SomeEnum e = UniformRandomProvider.next(SomeEnum); >>> > >>> > ? >>> > >>> > Is that too weird for this component? >>> > >>> > Gary >>> > >>> >>> > > - > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > >
Re: [RNG] Generating for enums
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 r = new CollectionSampler<>(RandomSource.create(RandomSource.SPLIT_MIX_64), Arrays.asList(CardinalDirection.values())); CardinalDirection e = r.sample(); ---CUT--- Cheers, Gilles Gary On Fri, Aug 4, 2017 at 11:02 AM, Amey Jadiyewrote: Hi, What's usecase for this BTW ? Might be unaware about requirement but this forced me to think why would someone need random enum ? Enums are generally "limited" immutable constants and people choose enum over the array of constants for good reason, however random provider seems best suited for choosing value from any Data-Structure holding "lot" of values. I think it's little weird but I would be happy if someone explain advantages. :-) Regards, Amey On Fri, Aug 4, 2017, 11:17 PM Gary Gregory wrote: > Hi All, > > Any thoughts on generation when you want to the domain to be an enum? > > SomeEnum e = UniformRandomProvider.next(SomeEnum); > > ? > > Is that too weird for this component? > > Gary > - To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org