0

我有一个无法修改的 Java 对象(对象 1),其中包含 25 个 ArrayList。我必须使用另一个对象(对象 2)并根据在对象 2 中找到的字符串将其放入对象 1 的相应列表之一中。每个列表都有一个且只有一个与之关联的唯一字符串,可以在任何对象 2。插入所有对象 2 的最快方法和/或最干净的方法是什么。

现在我只是使用 if/else if 语句来进行排序,并且我不能使用 switch 语句,因为带有 String case 的 switch 语句最近才在 Java SE 7 中实现。

编辑1:修改了标题和问题。这里还有一个例子:

if ("1.3.6.1.4.1.19376.1.5.3.1.3.25".equals(root)) {
            physicalExamModel.addVitalSigns(observationModel);
        } else if ("1.3.6.1.4.1.19376.1.5.3.1.1.9.16".equals(root)) {
            physicalExamModel.addGeneralAppearanceObservations(observationModel);
        } else if ("1.3.6.1.4.1.19376.1.5.3.1.1.9.48".equals(root)) {
            physicalExamModel.addVisibleImplantedMedicalDevicesObservations(observationModel);
        } else if ("1.3.6.1.4.1.19376.1.5.3.1.1.9.17".equals(root)) {
            physicalExamModel.addIntegumentarySystemObservations(observationModel);
        } else if ("1.3.6.1.4.1.19376.1.5.3.1.1.9.18".equals(root)) {
            physicalExamModel.addHeadObservations(observationModel);
        } else if ("1.3.6.1.4.1.19376.1.5.3.1.1.9.19".equals(root)) {
            physicalExamModel.addEyeObservations(observationModel);
4

2 回答 2

0

假设您的Object2实例存储在 some ArrayorCollection并且所需的字段是唯一的,您可以将它们存储在 a 中Map,然后根据需要将它们取出。

使用 aTreeMap他们甚至会被排序:

final Collection<Object2> object2s = new LinkedList<>();
final Map<String, Object2> myMap = new TreeMap<>();
for(final Object2 o2 : object2s) {
    myMap.put(o2.getField(), o2);
}

final Object2 desiredObject2 = myMap.get("SomeDesiredValue");

假设所需的值不是唯一的,那么您可以使用Collections.sort自定义比较器对 a 进行排序ListObject2按所需字段对 aArrays.sort进行排序:Array

final List<Object2> object2s = new LinkedList<>();
Collections.sort(object2s, new Comparator<Object2>() {

    @Override
    public int compare(Object2 o1, Object2 o2) {
        return o1.getField().compareTo(o2.getField());
    }
});

具有始终被排序的Map优点,即使您Object2稍后添加更多,但缺点是属性必须是唯一的。否则,该Collections.sort方法将正常工作。

于 2013-04-01T23:21:40.137 回答
0

为什么不使用Map<String, List<Foo>>? 键是“与 [每个列表] 关联的唯一字符串”,值当然是列表本身。

于 2013-04-01T23:14:16.277 回答