【问题标题】:How to Sort one List by another List inside this first List?如何在第一个列表中按另一个列表对一个列表进行排序?
【发布时间】:2020-03-08 09:24:39
【问题描述】:

各位,我需要帮助来解决我的问题。

这里是:我有一个列表,例如: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 接口,但我没有运气。你们能帮我弄清楚如何解决这个问题吗?非常感谢您的帮助。

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

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

【问题讨论】:

标签: java arrays list sorting object


【解决方案1】:

由于每个Result 对象中的List&lt;Result&gt;List&lt;Sim&gt; 中的对象数量相同,我认为Result 对象和Sim 对象之间存在一对一的关系.我的意思是听起来每个Result 对象都与一个Sim 对象相关。如果这是真的,那么您应该更改您的 Result 类以保存单个 Sim 而不是整个 Sims 列表:

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

    // ...
}

现在您可以使用相关Sim 对象中的属性轻松比较Result 对象:

public int compareTo(Result o) {
    return Double.compare(this.sim.value, o.sim.value);
}

【讨论】:

  • 这正是我的想法,但在我们收到 OP 的回复之前,我将不投赞成票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 2012-02-08
相关资源
最近更新 更多