在哈希表的每次重试期间从哈希表中检索单对[Key / Value]。

时间:2013-08-19 06:03:23

标签: generics hashmap hashtable

我想从哈希表中检索单个字符串。

在这里,在我的代码中,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;
            }

1 个答案:

答案 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();
            }
        });
}