我写了一段逻辑,我的目标是从地图中选择随机密钥。地图已被指定为ConcurrentSkipListMap<Text,IntWritable> tuples
。另外,我对Java没有任何工业级经验,因此很难克服这个问题。
这段代码是
Set<Text> keys = tuples.keySet();
String randomKeys = keys.get(random.netInt(keys.size()))
我无法找出错误陈述:method get(int) is undefined for the type Set<Text>
此外,我搜索了类似的问题,并且使用List
确实存在解决方案,但我的键/值对存储为ConcurrentSkipListMap
,因此无法弄清楚这一点。
感谢。
答案 0 :(得分:4)
首先,Set
没有get()
方法。您可以使用List
。此外,它是Random.nextInt()
List<Text> keys = new ArrayList<>(tuples.keySet());
Text randomKeys = keys.get(random.nextInt(keys.size()));
此外,根据您的使用情况,我认为Collections.shuffle(List)
一次可能会更好,然后迭代它(可能使用for-each
loop),如
List<Text> keys = new ArrayList<>(tuples.keySet());
Collections.shuffle(keys);
for (String randomKey : keys) {
// ...
}
答案 1 :(得分:0)
Set没有get()方法,因为它不像。
那样的数组你可以通过迭代器迭代Set:set.iteraor()。next()
迭代器接口实现了以下方法:
public boolean hasNext()
public E next()
public void remove()
你可以像这里一样使用它(在这种情况下是一个Set):
Iterator it = set.iterator();
while (it.hasNext())
{
String setText = (String) it.next();
System.out.println(setText);
}