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?
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?
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) ;
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);
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 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.