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