Yeah, sorry, I forgot about the hard coded enuf.

Gary

On Aug 5, 2017 11:37 AM, "Gilles" <gil...@harfang.homelinux.org> wrote:

> 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(CardinalDirectio
>>> n.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(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
>
>

Reply via email to