【发布时间】:2019-10-31 12:29:41
【问题描述】:
我试图找到一种方法,使用ThreadLocalRandom 从提供的不同范围列表中获取随机值,并从方法中返回该随机值。我一直在尝试不同的方法,但运气不佳。
我试过了:
private static final Long[][] values = {
{ 233L, 333L },
{ 377L, 477L },
{ 610L, 710L }
};
// This isn't correct
long randomValue = ThreadLocalRandom.current().nextLong(values[0][0]);
但我不知道如何从中获取特定范围的随机值,所以我想尝试Map 方法,我尝试创建一个整数映射和长列表:
private static Map<Integer, List<Long>> mapValues = new HashMap<>();
{{233L, 333L}, {377L, 477L}, {610L, 710L}} // ranges I want
我不确定如何将这些值范围存储到地图中。
我尝试过添加值,例如:
// Need to get the other value for the range in here, in this case 333L
map.put(1, 233L);
我不知道如何将 333L 添加到列表中,我搜索并尝试了各种方法,但总是出现错误,例如:found 'long', required List
我希望 Map 中的 Integer 是关联范围的 id,例如 1 表示 233L-333L,这样我就可以先告诉它,从 Map 中获取一个随机的 Int 键,例如 1,然后然后使用ThreadLocalRandom.current().nextLong(origin, bound),其中 origin 为 233L,bound 为 333L,然后返回 233L-333L 范围内的随机值。
我不确定这是否可能,或者我只是以错误的方式处理这个问题 - 感谢任何指导/帮助!
【问题讨论】:
-
列表中是否总是只有两个元素表示范围?如果是这样,
origin = longs[0]和bound = longs[1]不会吗? -
是的,有可能。你为什么不试一试?但是请注意,如果您的范围没有相同的大小,这不会为您提供所有数字的均匀分布。另请注意,如果基本上是地图,则数组的索引是键: values[0] 等效于 mapValues.get(0)
-
谢谢!我已经尝试过,我认为我的主要问题是我根本无法弄清楚如何将值添加到地图中 - 为清楚起见编辑了问题
标签: java arrays list dictionary arraylist