2 Stimmen

Wie kann man diese Liste sortieren?

Ich habe eine String-Liste

ArrayList<String> list = new ArrayList<String>();

mit jedem Artikel:

list.add(week+" "+year);

donde week y year sind ganze Zahlen.

Wie kann ich diese Liste in aufsteigender Reihenfolge sortieren?

10voto

XecP277 Punkte 390

Ich empfehle, eine Datenstruktur zu erstellen, die die gewünschten Daten enthält und Vergleichbares implementiert.

class WeekOfYear implements Comparable<WeekOfYear> {
    private int week ;
    private int year ;
    public WeekOfYear(int week, int year) {
        this.week = week ;
        this.year = year ;
    }
    /**
     * ...
     */
    public int compareTo(WeekOfYear other) {
        int delta = this.year - other.year ;

        return (int)Math.signum(
                delta != 0 ? delta : (this.week - other.week));
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder() ;
        builder.append(week > 9 ? "" : "0") ;
        builder.append(week).append(" ") ;
        builder.append(year) ;

        return builder.toString();
    }
}

List<WeekOfYear> weeks ;
weeks = new ArrayList<WeekOfYear>();
Collections.sort(weeks) ;

5voto

stacker Punkte 65961

Sie müssen einen Komparator schreiben, der Woche und Jahr aufteilt und das Jahr vor der Woche vergleicht (wenn die Jahresfelder gleich sind). Übrigens sollten Sie Woche und Jahr in ein Objekt einfügen, um die Aufteilung zu vermeiden.

3voto

missingfaktor Punkte 88801
Collections.sort(list, new Comparator<String>() {
  public int compare(String a, String b) {
    // Your string ordering logic here. (I won't write that for you.)
  }
});

2voto

rkg Punkte 5419

Implementieren Sie einen Comparator, um die zusammengesetzten Wochen- und Jahreswerte zu vergleichen. Verwenden Sie diesen Komparator, um die Liste zu sortieren. Das sollte funktionieren. Ein Beispiel für die Implementierung finden Sie unten

class WeekYearComparator implements Comparator throws NumberFormatException{
 public int compare(Object weekYr1, Object weekYr2){

 String[] tokens1 = ((String)weekYr1).split(" ");
 int week1 = Integer.parseInt(tokens1[0].trim());
 int year1 = Integer.parseInt(tokens1[1].trim());

 String[] tokens2 = ((String)weekYr2).split(" ");
 int week2 = Integer.parseInt(tokens2[0].trim());
 int year2 = Integer.parseInt(tokens2[1].trim());

 if( year1 > year2)
  return 1;
 else if( year1 < year2)
  return -1;
 else if(year1 = year2){
   if(week1 > week2)
    return 1;
   if(week1 < week2)
    return -1;
   if(week1 == week2)
    return 0;
 }

}

Arrays.sort(list, new WeekYearComparator);

1voto

Boris Pavlović Punkte 60636
List<String> weeks = new ArrayList<String>();
weeks.add(1 + " " + 1958);
weeks.add(32 + " " + 2007);
weeks.add(32 + " " + 1999);

Collections.sort(weeks, new Comparator<String>()
{
  public int compare(String o1, String o2)
  {
    int y1 = Integer.parseInt(o1.substring(o1.indexOf(" ") + 1));
    int y2 = Integer.parseInt(o2.substring(o2.indexOf(" ") + 1));
    if (y1 == y2)
    {
      int w1 = Integer.parseInt(o1.substring(0, o1.indexOf(" ")));
      int w2 = Integer.parseInt(o2.substring(0, o2.indexOf(" ")));
      return w1 - w2;
    }
    return y1 - y2;
  }
});

System.out.println("weeks = " + weeks);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X