如何在第一个列表中按另一个列表对一个列表进行排序?

时间:2019-11-12 16:11:55

标签: java arrays list sorting object

我需要帮助来尝试解决我的问题。

在这里是:我有一个列表,如:List<Result> T,在此列表中,我还有另一个列表。 List<Result> T具有类似Result (int a, int b, int c, int d, List<Sim> sim)的构造函数。 List<Sim>有两个属性,即int and double值。我想做的是: 当我在T中添加一个元素时,List<Result>需要按List<Sim>进行排序,是它的双精度值

因此,List将以List上此double值的降序排序。我尝试了很多事情,但直到没有任何结果。每当我在T上添加一个元素时,该元素都会添加到List的末尾,并且List本身不会进行排序。

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

我尝试了其他类型的比较器,例如比较和实现Comparable接口,但是我没有运气。你们能帮我弄清楚如何解决这个问题吗?非常感谢您的帮助。

This is an example of what I need to do

伙计们,我真的很感谢您的帮助,确实可以帮助我弄清楚如何解决我的问题。这就是我所做的:

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

1 个答案:

答案 0 :(得分:0)

由于每个List<Result>对象中List<Sim>Result中对象的数量均相同,因此我认为{{1 }}对象和Result对象。我的意思是,听起来每个Sim对象都与一个Result对象正相关。如果是这样,那么您应该更改Sim类以容纳单个Result而不是Sim的整个列表:

Sim

现在,您可以使用相关class Result { int a, b, c, d; Sim sim; public Result(int a, int b, int c, int d, Sim sim) { this.a = a; this.b = b; this.sim = sim; } // ... } 对象中的属性轻松比较Result对象:

Sim