我想从哈希表中检索单个字符串。
在这里,在我的代码中,Hashtable键返回一些id [ex 1234],值返回一些url [ex ww.abc.com/],在最后一步,我将此id附加到url。
我希望我的函数返回完整的url [附加一个],就像该散列表的每次迭代一样,键和值将是不同的。所以网址也会有所不同。 我希望此函数在每次迭代时检索URL(键值对)。
public String readFromHashtable(Hashtable<String, String> recruiter){
String url=null;
try{
Iterator<Map.Entry<String, String>> it = recruiter.entrySet().iterator();
while (it.hasNext())
{
Map.Entry<String, String> pair = it.next();
String key = pair.getKey();
String value = pair.getValue();
url =new StringBuffer(value).append(key).toString();
System.out.println(url);
}
}catch(Exception e){
e.printStackTrace();
}
return url;
}
答案 0 :(得分:1)
您要尝试实现的目标并不是很清楚,但我怀疑您希望从您的方法返回Iterable<String>
而不是单个字符串。例如:
// No need to tie ourselves to Hashtable...
public static Iterable<String> readFromMap(final Map<String, String> map) {
return new Iterable<String>() {
@Override public Iterator<String> iterator() {
return new Iterator<String>() {
private final Iterator<Map.Entry<String, String>> iterator
= map.entrySet().iterator();
@Override public void remove() {
iterator.remove();
}
@Override public boolean hasNext() {
return iterator.hasNext();
}
@Override public String next() {
Map.Entry<String, String> entry = iterator.next();
return entry.getValue() + entry.getKey();
}
};
}
};
}
这看起来像很多代码,但实际上它只是包装Map.entrySet().iterator()
返回的迭代器,以便它可以转换每个条目。另一种选择是在Iterables
中使用Guava。类似的东西:
// No need to tie ourselves to Hashtable...
public static Iterable<String> readFromMap(final Map<String, String> map) {
return Iterables.transform(map.entrySet(),
new Function<Map.Entry<String, String>, String>() {
@Override public String apply(Map.Entry<String, String> entry) {
return entry.getValue() + entry.getKey();
}
});
}