【问题标题】:TreeMap to ArrayList JavaTreeMap 到 ArrayList Java
【发布时间】:2013-12-30 15:32:26
【问题描述】:

我有一个 TreeMap,它有一个字符串键,值部分是一个包含至少四个值的列表。

Map<String,List<String>> mMap = new TreeMap<String,List<String>>(); 

我正在使用树形图,以便对我的键进行排序。但是,在排序之后,我想将此 TreeMap 映射到列表视图。我想将地图转换为列表,然后为列表视图构建一个适配器。但是当我这样做时我无法转换它

ArrayList<String> trendyList = new ArrayList<String>(mMap);  

上面写着:The constructor ArrayList&lt;String&gt;(Map&lt;String,List&lt;String&gt;&gt;) is undefined

还有其他方法可以做到这一点吗?

【问题讨论】:

  • trendyList 应该包含键或值吗?
  • 我的错!它只能包含键或值。但是我很傻,我忘记了这个事实。 Lorem ipsum dolor sit amet!
  • 这个问题是android特有的?

标签: java android list treemap


【解决方案1】:

假设你想要一个字符串列表:

List<List<String>> trendyList = new ArrayList<>(mMap.values()); 

如果你想合并列表,那么它会变得有点复杂,你需要自己遍历这些值并进行合并。

合并列表:

List<String> trendyList = new ArrayList<>(); 
for (List<String> s: mMap.values()) {
   trendyList.addAll(s);
}

用键合并列表:

List<String> trendyList = new ArrayList<>(); 
for (Entry<String, List<String>> e: mMap.entrySet()) {
   trendyList.add(e.getKey());
   trendyList.addAll(e.getValue());
}

在 Java 8 中,您可以获得执行此操作的新工具。

合并列表:

// Flat map replaces one item in the stream with multiple items
List<String> trendyList = mMap.values().stream().flatMap(List::stream).collect(Collectors.toList())

用键合并列表:

List<String> trendyList = mMap.entrySet().stream().flatMap(e->Stream.concat(Stream.of(e.getKey()), e.getValue().stream()).collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    Map 可以看作是键值对的集合,列表只是值的集合。您必须选择现在是否需要密钥,然后使用keySet(),或者如果您想要您的值而不是使用values(),它会返回List&lt;String&gt;的集合

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多