Java 如何在第一个列表中按另一个列表排序?
伙计们,我需要帮助来解决我的问题 这是:我有一个列表,比如:Java 如何在第一个列表中按另一个列表排序?,java,arrays,list,sorting,object,Java,Arrays,List,Sorting,Object,伙计们,我需要帮助来解决我的问题 这是:我有一个列表,比如:List T,在这个列表中我有另一个列表。List T的构造函数类似于:Result(int a、int b、int c、int d、List sim)列表有两个属性,int和double值。我想做的是: 当我在T中添加一个元素时,列表需要按其双值进行排序 所以,列表将按列表中该双精度值的降序排序。我尝试了很多东西,但直到我没有得到任何结果。每次我在T上添加一个元素时,这个元素被添加到列表的末尾,而列表本身并没有排序 public cl
List T
,在这个列表中我有另一个列表。List T
的构造函数类似于:Result(int a、int b、int c、int d、List sim)
<代码>列表有两个属性,int和double
值。我想做的是:
当我在T
中添加一个元素时,列表
需要按其双值进行排序
所以,列表将按列表中该双精度值的降序排序。我尝试了很多东西,但直到我没有得到任何结果。每次我在T上添加一个元素时,这个元素被添加到列表的末尾,而列表本身并没有排序
public class Result
{
int a, b, c, d;
List<Sim> sim;
public Result(int a, int b, int c, int d, List<Sim> sim)
{
this.a = a;
this.b = b;
this.sim = sim;
}
public int compareTo(Result o)
{
int cmp = ((a.key == o.key) && (b.key == o.key)) ? 0 : (b.key < o.key) ? -1 : 1;
return cmp;
}
}
public class Sim
{
int a;
double value;
public Sim (int a, double value)
{
this.a = a;
this.value = value;
}
}
公共类结果
{
INTA、b、c、d;
列表sim;
公共结果(整数a、整数b、整数c、整数d、列表sim)
{
这个a=a;
这个.b=b;
this.sim=sim;
}
公共整数比较(结果o)
{
intcmp=((a.key==o.key)和&(b.key==o.key))?0:(b.key
我尝试了其他类型的比较器,比如compare和实现Comparable接口,但没有成功。你们能帮我找出解决这个问题的方法吗?非常感谢你的帮助
伙计们,我真的很感谢你们的帮助,确实帮助我找到了解决问题的方法。这就是我所做的:
public static class SimComparator implements Comparator<Result>
{
public int compare(Result res1, Result res2)
{
double sim1 = res1.sim.get(0).sim;
double sim2 = res2.sim.get(0).sim;
if (sim1 < sim2)
{
return -1;
}
else if (sim1 > sim2)
{
return 1;
}
else
}
return 0;
}
}
}
公共静态类SimComparator实现Comparator
{
公共整数比较(结果res1,结果res2)
{
双sim1=res1.sim.get(0.sim);
双sim2=res2.sim.get(0.sim);
if(sim1sim2)
{
返回1;
}
其他的
}
返回0;
}
}
}
由于每个结果
对象的列表
和列表
中的对象数量相同,我认为结果
对象和Sim
对象之间存在一对一的关系。我的意思是,听起来每个结果
对象都与一个Sim
对象相关。如果这是真的,那么您应该将结果
类更改为保存单个Sim
而不是整个Sim
列表:
类结果{
INTA、b、c、d;
Sim卡;
公开结果(int a、int b、int c、int d、Sim卡){
这个a=a;
这个.b=b;
this.sim=sim;
}
// ...
}
现在,您可以使用相关的Sim
对象中的属性轻松比较Result
对象:
public int compareTo(结果o){
返回Double.compare(this.sim.value,o.sim.value);
}
由于每个结果
对象的列表
和列表
中的对象数量相同,我认为结果
对象和Sim
对象之间存在一对一的关系。我的意思是,听起来每个结果
对象都与一个Sim
对象相关。如果这是真的,那么您应该将结果
类更改为保存单个Sim
而不是整个Sim
列表:
类结果{
INTA、b、c、d;
Sim卡;
公开结果(int a、int b、int c、int d、Sim卡){
这个a=a;
这个.b=b;
this.sim=sim;
}
// ...
}
现在,您可以使用相关的Sim
对象中的属性轻松比较Result
对象:
public int compareTo(结果o){
返回Double.compare(this.sim.value,o.sim.value);
}
这正是我所想的,但我将保留我的投票权,直到我们听到OP的回复。这正是我所想的,但我将保留我的投票权,直到我们听到OP的回复。评论不用于进一步讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。