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

时间:2015-04-08 11:13:32

标签: java sorting vector

我有一个对象矢量。

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

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

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

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

4 个答案:

答案 0 :(得分:1)

在你的功能中,使用Anonymous Classes

使用不同的排序标准在现场实施Comparator
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
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

为了能够以紧凑的方式编写它,您可以自己定义一个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>并在必要时转换值。