加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 使用另一个列表对列表进行排序

发布时间:2020-12-14 06:05:34 所属栏目:Java 来源:网络整理
导读:是否可以将 Java Collections排序方法与比较器一起使用,因为它会对一个列表进行排序,以便按原始列表的索引对另一个列表进行排序,以便列表保持配对?谢谢. 解决方法 你不能用比较器做到这一点.您的问题的解决方案是构建第三个列表,该列表包含给定列表中的对应
是否可以将 Java Collections排序方法与比较器一起使用,因为它会对一个列表进行排序,以便按原始列表的索引对另一个列表进行排序,以便列表保持配对?谢谢.

解决方法

你不能用比较器做到这一点.您的问题的解决方案是构建第三个列表,该列表包含给定列表中的对应元素对.然后排序,并复制回原始列表.
public class Pair<X,Y> {
  public final X x;
  public final Y y;

  public Pair(X x,Y y) {
    this.x = x; this.y = y;
  }
}

public static<X,Y> void sortTwoLists(List<X> xs,List<Y> ys,final Comparator<X> c) {
 if (xs.size() != ys.size()) 
   throw new RuntimeException("size mismatch");

 List<Pair<X,Y>> temp = new ArrayList<Pair<X,Y>>();

 for (int i = 0; i < xs.size(); ++i) 
   temp.add(new Pair<X,Y>(xs.get(i),ys.get(i)));

 Collections.sort(temp,new Comparator<Pair<X,Y>>() {
  @Override
  public int compare(Pair<X,Y> a,Pair<X,Y> b) {
    return c.compare(a.x,b.x);
  }
 });

 for(int i = 0; i < xs.size(); ++i) {
   xs.set(i,temp.get(i).x);
   ys.set(i,temp.get(i).y);
 }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读