TreeMap到ArrayList Java

时间:2013-12-12 09:41:40

标签: java android list treemap

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

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

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

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

它说:The constructor ArrayList<String>(Map<String,List<String>>) is undefined

还有其他方法吗?

2 个答案:

答案 0 :(得分:13)

假设您需要一个字符串列表列表:

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());

答案 1 :(得分:2)

地图可以看作是键值对的集合,列表只是值的集合。您必须选择现在是否需要密钥,然后使用keySet(),或者如果您希望使用的值超过使用values(),则返回List<String>

的集合