-1

我有最多 3 个相同对象元素的未排序集合。这些元素的属性类型可以是 A、B 或 C。

我想根据类型 A 优先于 B 的条件从该集合中获取 1 个元素,B 优先于 C。

例如。

  • {B, A, C} -> A
  • {B, C} -> B
  • {B} -> B
  • {B, A} -> A
  • {A, B} -> A

什么是最快或最有效的方法来做到这一点。我必须对数千个集合执行此操作。

我正在使用 java,所以我可以使用任何类型的集合。

4

1 回答 1

1

您可以在一次迭代中完成,而不是遍历列表 3 次。这是一些伪代码:

Element best = list.get(0);
for (int i = 1; i < list.size(); i++) {
    Element cur = list.get(i);
    if (cur.isA() || (cur.isB() && best.isC())) {
        best = cur;
    }
}
// best will have property A if possible, then property B if possible, then C.

更准确地说,如果存在则查找具有属性 A 的最后一个元素,如果存在则查找具有属性 B 的第一个元素,否则查找第一个元素。如果您的用例需要,您可以调整 if 语句逻辑以使这些规则更加一致。

于 2018-06-22T19:14:42.093 回答