【问题标题】:what is the fastest/cleanest way to insert values into lists based on a string input?根据字符串输入将值插入列表的最快/最干净的方法是什么?
【发布时间】:2013-03-23 02:53:22
【问题描述】:

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

现在我只是使用 if/else if 语句来进行排序,我不能使用 switch 语句,因为带有字符串情况的 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);

【问题讨论】:

  • 对不起,我不明白你的问题。
  • 我们可以举个例子吗?

标签: java algorithm sorting arraylist


【解决方案1】:

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

【讨论】:

  • 或者更好的是Map<String, TreeSet<Foo>>
  • @LuiggiMendoza 我不清楚 OP 实际上是否希望对 25 个列表中的每一个进行排序。他的意思可能是另一种意义上的“分类”。诸如“我需要为 Object 2s 挑选一个水槽。”
  • 我不清楚为什么 OP 不能修改 Object 1 开头,以及 if-elseswitch 之间的变化与 改进算法(是的,这让我大吃一惊)。
【解决方案2】:

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

使用TreeMap,它们甚至会被排序:

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.sortObject2Object2 中的 List 进行排序,以按所需字段对 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 方法可以正常工作。

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 2016-04-20
    • 2014-09-04
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    相关资源
    最近更新 更多