Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如何对具有不同属性的对象向量进行排序_Java_Sorting_Vector - Fatal编程技术网

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

Java-如何对具有不同属性的对象向量进行排序,java,sorting,vector,Java,Sorting,Vector,我有一个物体的矢量 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;

我有一个物体的矢量

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
    }
}
public函数(){
对于(int i=0;i<不同统计的数量;i++){
//按统计分类(i);
//做一些分析
}
}

这样我就可以按照指定的统计对向量进行排序,对向量进行一些分析。然后根据另一个统计数据进行排序,进行相同的分析等,实现不同的比较器,每个类字段一个,并在循环中使用它们。

在您的函数中,使用不同的排序标准,使用

public函数(){
对于(int i=0;i<不同统计的数量;i++){
//按stat排序(i);实现比较器
//做一些分析
//按统计(i)排序;再次实现比较器
//多做分析
}
}

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

为了能够以简洁的方式编写它,您可以定义一个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.
}
@SuppressWarnings(“未选中”)
静态无效排序(列表,函数f){
Collections.sort(list,(e1,e2)->(compariable)f.apply(e1)).comparieto(f.apply(e2));
}
公共作废功能(列表){
排序方式(列表,c->c.stat1);
//做一些分析
排序(列表,c->c.stat2);
//做一些分析
//等等。
}
但是你仍然有一个问题,那就是你不能简单地循环统计数据。要做到这一点,你必须把所有的统计数据放入一个列表或散列图中。例如,该列表可以是
list
类型。在最坏的情况下,您必须使用
HashMap
,并在必要时强制转换值

@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.
}