拆分TreeMap <list <>,List&lt;&gt;&gt;分成两个ArrayList </list <>

时间:2014-12-25 21:54:57

标签: android arraylist treemap

我有两个ArrayLists

List<String> names = new ArrayList<String>(10);
List<Drawable> drawables = new ArrayList<Drawable>(10);

我想按字母顺序排序。

为此,我创建了一个TreeMap

Map<List<String>, List<Drawable>> myMapToSort = new TreeMap<List<String>, List<Drawable>>();
myMapToSort.put(names, drawables);

前两个问题

地图现在按lexicographical顺序排序了吗?或者我需要做些额外的事情吗?

在我对它们进行排序后,如果它们还没有,我想再将它们拆分回List<String>List<Drawable>。我试过这样:

List<String> sortedNames = new ArrayList<String>(myMapToSort.keySet());

当然它不起作用,因为myMapToSort.keySet()返回Set而不是ListList Constructor Set没有{{1}}。

那么我怎样才能实现这一目标以及我误解的内容呢?

感谢任何帮助。提前谢谢!

2 个答案:

答案 0 :(得分:3)

我自己想出来了。

关键是要创建一个TreeMap而不是两个列表,而是两个单个对象:

Map<String, Drawable> myTreeMap = new TreeMap<String, Drawable>;

然后将Items中的Arraylists逐个添加到地图:

for(int i = 0; i<names.size(); i++) {
        myTreeMap.put(names.get(i), drawables.get(i));
}

现在,Map与Drawables相关地自动排序Lexicographical。 这意味着Names and Drawables are sorted in lexicographical order

如果您想要检索keysvalues并将它们单独放回ArrayLists,只需输入:

List <String> mySortedNames = new ArrayList<String>(myTreeMap.keySet());
List <Drawables> mySortedDrawables = new ArrayList<Drawables>(myTreeMap.values());

那就是它。 ;)

答案 1 :(得分:0)

您可以使用SortedSet(或SortedList)来排序元素。元素按照其自然顺序排序,或者通过在排序集创建时提供的比较器进行排序。

用于在两个列表中拆分地图:

List<String> sortedNames = new ArrayList<String>();
List<Drawable> drawables = new ArrayList<Drawable>();

for (Map.Entry<String, Drawable> entry : map.entrySet())
{
  sortedNames.add(entry.getKey()
  drawables.add(entry.getValue());
}