我有两个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
而不是List
。
List
Constructor
Set
没有{{1}}。
那么我怎样才能实现这一目标以及我误解的内容呢?
感谢任何帮助。提前谢谢!
答案 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
。
如果您想要检索keys
和values
并将它们单独放回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());
}