我目前有一个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);
虽然它可以很好地存储所有ID,但是当我打印出TreeMap时,它似乎只需要mapB的最后一个值并存储它。即日志的一个例子:
地图:1:巴黎,地图:2:巴黎,地图:3:巴黎
但我添加的是:
mapB.put("1", London);
mapB.put("2", Berlin);
mapB.put("3", Paris);
所以是的,我对发生的事情感到有点困惑,是否有人能提供一些指导?谢谢!
答案 0 :(得分:3)
TreeMap仅记住您为每个索引输入的最后一个值,因此巴黎为所有索引。
如果您知道mIds和mCustomClass [相同长度]中有相应的元素,只需使用一个,只需使用mapB.put(mIds [i],mCustomClass [i])。
对于更通用的方法,如果在两个数组(或集合)中有相应的项,则应考虑创建一个更好的对象,有2个字段(id和class),只需为该对象编写自己的Comparator,只考虑身份证。