【问题标题】:Java - Simple way to put LinkedHashMap keys/values into respective Lists?Java - 将 LinkedHashMap 键/值放入相应列表的简单方法?
【发布时间】:2011-05-18 16:59:12
【问题描述】:

我有一个LinkedHashMap < String, String > map

List < String > keyList;
List < String > valueList;

map.keySet();
map.values();

有没有一种简单的方法可以从 map.keySet() 填充 keyList 和从 map.values() 填充 valueList,还是我必须迭代?

【问题讨论】:

    标签: java list dictionary collections linkedhashmap


    【解决方案1】:

    使用 java 8 的不同方法 -

    List<String> valueList = map.values().stream().collect(Collectors.toList()); 
    List<String> keyList = map.keySet().stream().collect(Collectors.toList());  
    

    注意事项:

    • stream() - 返回Object 的序列,将集合(此处为map)视为源

    • Collectors - 收集器用于组合对流元素的处理结果。

    【讨论】:

      【解决方案2】:

      大多数集合都接受 Collection 作为构造函数参数:

      List<String> keyList = new ArrayList<String>(map.keySet());
      List<String> valueList = new ArrayList<String>(map.values());
      

      【讨论】:

      • LinkedHashMap 和 List 都有顺序,所以我希望得到的结果是 List 与地图的顺序相同。但是,您使用 Set 作为中间类型(map.keySet() 的返回值),它没有顺序。因此,不能保证 keyList 与 map 具有相同的顺序(但请注意, map.values() 返回一个集合而不是一个集合,所以它没有问题。[删除了更多关于 values() 的信息,因为这是基于我对文档的误解]
      • 我很好奇 map.keySet() 并检查了代码。对于 LinkedHashMap,这将返回 LinkedHashMap$LinkedKeySet,它确实具有可预测的顺序(源 LinkedHashMap 的顺序),就像 map.values() 一样。所以上面的代码会按预期工作,你最终会得到两个列表,其中 keyList[n] ==> valueList[n].
      【解决方案3】:

      当然!

      keyList.addAll(map.keySet());
      

      或者你也可以在创建时传递它

      List<String> keyList = new ArrayList<String>(map.KeySet());
      

      http://download.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

      【讨论】:

        猜你喜欢
        • 2011-05-28
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 2013-09-26
        • 2023-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多