Java - 如何对具有不同属性的对象的向量进行排序

Java - How to sort vector of objects with different attributes

我有一个对象向量。

class companyInfo {
    String name;
    int stat1;
    int stat2;
    double stat3;
    double stat4;
    double stat5;
}

我知道如何通过使用其中一个属性实现比较器来对向量进行排序,但我需要能够动态排序。例如

public function() {
    for(int i = 0; i < number of different stats; i++) {
      //sort by stat(i);
      //do some analysis
    }
}

以便我可以按指定的统计数据对矢量进行排序,对矢量进行一些分析。然后按另一个统计数据排序,进行相同的分析等等

实现不同的比较器,每个 class 字段一个,并在循环中使用它们。

在你的函数中,使用不同的排序标准当场实现 Comparator,使用 Anonymous Classes

public function() {
    for(int i = 0; i < number of different stats; i++) {
      //sort by stat(i); Implement Comparator
      //do some analysis
      //sort by stat(i); Implement Comparator again 
      //do more analysis
    }
}

您可以使用 Bean Comparator。它允许您使用反射对对象中的任何 属性 进行排序。

为了能够以紧凑的方式编写此代码,您可以自己定义一个 sortBy 方法。

@SuppressWarnings("unchecked")
static <A, B> void sortBy(List<A> list, Function<A, B> f) {
  Collections.sort(list, (e1, e2) -> ((Comparable<B>)f.apply(e1)).compareTo(f.apply(e2)));
}

public void function(List<CompanyInfo> list) {
  sortBy(list, c -> c.stat1);
  //do some analysis
  sortBy(list, c -> c.stat2);
  //do some analysis
  //etc.
}

但是您仍然遇到不能简单地遍历统计信息的问题。为此,您必须将所有统计数据放入列表或哈希映射中。该列表可以例如类型为 List<Number>。在最坏的情况下,您必须使用 HashMap<String, Object> 并在必要时转换值。