2014-11-06 124 views
4

我目前有一个String ID(List<String>)和一个自定义类别的无序列表(List<CustomClass>)的有序列表。我想根据IDS的有序列表排序自定义类对象的列表。基于另一个列表排序列表

我印象最好的方法是使用TreeMap。所以,我实现了这一点:

Map<String, CustomClass> mapB = new HashMap<String, CustomClass>(); 
    for (String id : mIds) { 
     for (CustomClass customClass : mCustomClass) {     
      mapB.put(thingId, mCustomClass); 
     } 
    } 

Map<String, CustomClass> treeMap = new TreeMap<String, CustomClass>(); 
treeMap.putAll(mapB); 

虽然,它存储所有的IDS很好,但是当我打印出树形图,它好像只需要mapB并存储的最后一个值。即日志的例子:

地图:1:巴黎地图:2:巴黎地图:3:巴黎

但我添加了:

mapB.put("1", London); 
mapB.put("2", Berlin); 
mapB.put("3", Paris); 

所以,是的,我对发生的事情有点困惑,有人能提供一些指导吗?谢谢!

+0

列表中的字符串是否存在于CustomClass中? – SMA 2014-11-06 12:05:08

+0

此类中的模型正在访问该id,但不会将其存储为本地变量或任何内容。 – 2014-11-06 12:06:08

+0

请提供列表和列表之间的关系以及CustomeClass的实现。如果CustomClass中的任何字段对应列表中的任何项目 SMA 2014-11-06 12:07:40

回答

3

这是因为你使用了两个fors。因此,这增加了在映射中的值: 1 - 伦敦 1 - 柏林 1 - 巴黎 2 - 伦敦 2 - 柏林 2 - 巴黎 3 - 伦敦 3 - 柏林 3 - 巴黎

TreeMap只记得您为每个索引放入的最后一个值,因为它们都是巴黎的值。

如果你知道你在mIds和mCustomClass [相同长度]中有相应的元素,只需使用一个,并简单地使用mapB.put(mIds [i],mCustomClass [i])。如果你在两个数组(或集合)中有相应的项目,你应该考虑创建一个更好的对象,有2个字段(id和class),并且只需为该对象编写你自己的比较器,只考虑ID。