0

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

在这里,在我的代码中,Hashtable 键返回一些 id [ex 1234],值返回一些 url [ex ww.abc.com/],在最后一步我将此 id 附加到 url。

我希望我的函数返回完整的 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;
            }
4

1 回答 1

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()以便它可以转换每个条目。另一种选择是IterablesGuava中使用。就像是:

// 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();
            }
        });
}
于 2013-08-19T06:14:40.447 回答