我目前有一个字符串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的最后一个Value并将其存储。即日志示例:
地图:1:巴黎,地图:2:巴黎,地图:3:巴黎
但是我添加的是:
mapB.put("1", London);
mapB.put("2", Berlin);
mapB.put("3", Paris);
是的,我对正在发生的事情有些困惑,有人可以提供一些指导吗?谢谢!
这是因为您正在使用两个fors。因此,这会在地图中添加以下值:1-伦敦1-柏林1-巴黎2-伦敦2-柏林2-巴黎3-伦敦3-柏林3-巴黎
TreeMap只记住您为每个索引输入的最后一个值,因此所有这些都记入巴黎。
如果您知道在mIds和mCustomClass [same length]中具有相应的元素,则只需使用其中一个,然后简单地使用mapB.put(mIds [i],mCustomClass [i])。
对于更通用的方法,如果您在两个数组(或集合)中都有对应的项目,则应考虑创建一个更好的对象,该对象具有2个字段(id和class),并且只需为该对象编写自己的Comparator,只需将帐号ID。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句