繁体   English   中英

如何将字符串和对象的映射转换为字符串和列表的映射

[英]How can i convert Map of Strings and Object to a Map of Strings and List

我有方法应该返回Map<Strings, List<String>>但同时我的方法给了我一个Map<Strings, Object> ,我想将对象的值传递给一个字符串列表。

这是当前的代码:

    @SuppressWarnings("unchecked")
    static Map<String, List<String>> getQueryParameters(JsonObject inputJsonObject) {

        JsonArray parameters = inputJsonObject.getJsonArray("parameters");

        Optional<JsonObject> queryParameters = parameters.stream().
            filter(JsonObject.class::isInstance).
            map(JsonObject.class::cast).
            filter(jsonObject -> jsonObject.getJsonObject("queryParameters") != null).
            map(item -> item.getJsonObject("queryParameters")).findFirst();

        Map<String, Object> paramMap = queryParameters.get().getMap();

paramMap包含键和值,值可以是整数数组,因此我想将它们放入下面的地图中:

 Map<String, List<String>> mystore = new LinkedHashMap<String, List<String>>();

我的解决方案是这个无法正常工作

 Map<String, List<String>> mystore = new LinkedHashMap<String, List<String>>();

        Map<String, Object> paramMap = queryParameters.get().getMap();

        Iterator it = paramMap.entrySet().iterator();

          while (it.hasNext()) {
            String key = it.next().toString();
            if (!mystore.containsKey(key)) ;

            mystore.put(key, new LinkedList<String>());

            mystore.get(key).add(it.next().toString());
        }

我是一个关键的另一个关键作为价值,只是一个混乱,任何建议? 在调试所发生的事情之后,我看到mystore将“键和值”同时作为键和值保存,它保持下一个“键和值作为值

应该是这样的:

while (it.hasNext()) {
        Map.Entry<String, Object> next = iterator.next();
        String key = next.getKey();
        Object value = next.getValue();
        if (!mystore.containsKey(key)) mystore.put(key, new LinkedList<String>());
        mystore.get(key).add(value.toString());
    }

我不会为你编写程序,而是帮助你找到问题。 你对Entry感到困惑。 如果您使用的是IDE,则应该更容易解决。 寻找这一行:

String key = it.next().toString();

Entry有K,V对。 迭代器返回一个EntrySet ,因此获取键的用法是it.next().getKey()it.next().getValue()

现在你有了正确的密钥,请继续调试。 而不是在代码的下面行放置和获取和操作。 换成正确的价值?

你:

mystore.put(key, new LinkedList<String>());
mystore.get(key).add(it.next().toString());

关于什么?

Entry entry = it.next();
//Get key and value here. DO coding using Entry's methods
List<String> ll = new LinkedList<String>();
ll.add(value)
mystore.put(key, ll);

提示:为了解更多信息,请始终使用Javadoc或参考文档。 这就是你学习语言的方式。 请参阅: https//docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM