合并从最大到最小

时间:2016-09-12 01:17:52

标签: java merge

我试图从2014年到2010年订购一份年份清单,但我在2010年到2014年之间进行了合并。我该如何更改?

这是比较器:

import java.util.Comparator;
import mundoA.Registro;

public class RegistroComparadorA implements Comparator<Registro> {

  public int compare(Registro r1, Registro r2) {
    int rta = 0;
    if (r1.getAnio() >r2.getAnio()) {
      rta = 1;
    } else if (r1.getAnio() < r2.getAnio()) {
      rta = -1;
    } else {
      rta = r1.getWard().compareTo(r2.getWard());
    }
    return rta;
  }
}

  public NodoListaSencilla<T> merge(NodoListaSencilla<T> a, NodoListaSencilla<T> b) {
    NodoListaSencilla<T> dummyHead, curr; 
    dummyHead = new NodoListaSencilla<T>(a.getElemento()); 
    curr = dummyHead;
    while(a !=null && b!= null) {
      if(c.compare(a.getElemento(), b.getElemento())>0) { 

        curr.setSiguiente(b);
        b = b.getSiguiente();

      }
      else {             
        curr.setSiguiente(a); 
        a= a.getSiguiente();                      
      }
      curr = curr.getSiguiente();
    }
    curr.setSiguiente((a == null) ? b : a);
    return dummyHead.getSiguiente();
  }

1 个答案:

答案 0 :(得分:0)

如果我理解了您的代码,那么您要比较元素ab,并在比较大于零时将当前元素设置为b。如果你想要更高的年份,你应该将它设置为a

请注意,Comparator具有实用程序功能,因此无需以您的方式显式定义compare。您可以按如下方式定义订单:

Comparator<Registro> order = Comparator
    .comparing(Registro::getAnio)
    .reversed()
    .thenComparing(Registro::getWard);

这对我来说更明确。