Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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_Arrays_List_Sorting_Object - Fatal编程技术网

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的回复。评论不用于进一步讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。