Sortierung

darksmilie

Erfahrenes Mitglied
Hi

Ich erstelle eine Liste von Objekten, die ich dann über ein Comparator sortieren lassen möchte. Er gibt mir alle Werte aus, aber leider nicht Sortiert.

Materialkasse:
Code:
package urlaubsplaner.material.datenaufbereitung.mitarbeiterverwaltung;

import java.util.Comparator;

/**
 * Verwaltet die Daten in der Datenaufbereitung im MitarbeiterauflistungService
 * 
 * @author Patrick Sowada
 *
 */
public class Mitarbeiterauflistung{
    
    private String _maname;
    private String _maid;
    private String[] _abtteamname;
    private String _abtid;
    private String _tid;
    

    public String getAbtid() {
        return _abtid;
    }
    public void setAbtid(String abtid) {
        _abtid = abtid;
    }
    public String getTid() {
        return _tid;
    }
    public void setTid(String tid) {
        _tid = tid;
    }
    /*
	 * Gibt den Abteilungsteamnamen als String zurück
	 * @return vom Typ String: Abteilungsteamnamen
	 */
    public String[] getAbtteamname() {
        return _abtteamname;
    }
    
    /*
	 * Setzt den Abteilungsteamnamen 
	 * @param vom Typ String
	 */
    public void setAbtteamname(String[] abtteamname) {
        _abtteamname = abtteamname;
    }
    
    /*
	 * Gibt den Mitarbeiternamen als String zurück
	 * @return vom Typ String: Mitarbeiternamen
	 */
    public String getManame() {
        return _maname;
    }
    
    /*
	 * Setzt den Mitarbeiternamen 
	 * @param vom Typ String
	 */
    public void setManame(String maname) {
        _maname = maname;
    }
    
    /*
	 * Gibt die Mitarbeiternumber als String zurück
	 * @return vom Typ String: Mitarbeiternumber
	 */
    public String getMaid() {
        return _maid;
    }
    
    /*
	 * Setzt die Mitarbeiternumber 
	 * @param vom Typ String
	 */
    public void setMaid(String maid) {
        _maid = maid;
    } 
    
    public Mitarbeiterauflistung[] sortierung(){
        Mitarbeiterauflistung[] ma = null;
        return ma;
    }
}

meine Sortierung:
Code:
Collections.sort(ma_list, new Comparator(){
    	    public int compare(Object o1, Object o2) {
    	        Mitarbeiterauflistung ma1 = (Mitarbeiterauflistung) o1;
    	        Mitarbeiterauflistung ma2 = (Mitarbeiterauflistung) o2;
    	        int i = ma1.getAbtid().compareTo(ma2.getAbtid());
    	        if(i < 1){
    	            int j = ma1.getTid().compareTo(ma2.getTid());
    	            if(j < 1){
    	                int h = prepairForCompare(ma1.getManame()).compareTo(prepairForCompare(ma2.getManame()));
    	            } else{
    	                return j;
    	            }
    	        } else{
    	            return i;
    	        }
    	        return 0;
    	    }
    	    
    	    private String prepairForCompare( Object o ){
    	        return ((String)o).toLowerCase().replace('ä','a')
    	        								.replace('ö','o')
    	        								.replace('ü','u')
    	        								.replace('ß','s');
    	    }
    	});
 
Java:
Collections.sort(ma_list, new Comparator(){
    	    public int compare(Object o1, Object o2) {
    	        Mitarbeiterauflistung ma1 = (Mitarbeiterauflistung) o1;
    	        Mitarbeiterauflistung ma2 = (Mitarbeiterauflistung) o2;
    	        int i = ma1.getAbtid().compareTo(ma2.getAbtid());
    	        if(i < 1){
    	            int j = ma1.getTid().compareTo(ma2.getTid());
    	            if(j < 1){
    	                int h = prepairForCompare(ma1.getManame()).compareTo(prepairForCompare(ma2.getManame()));
    	            } else{
    	                return j;
    	            }
    	        } else{
    	            return i;
    	        }
    	        return 0;
    	    }
Der Code gibt dir immer nur 1 oder 0 zurück. Ein kleiner mit -1 bekommst du hier nie zustande. Denn du setzt zwar h = prepairFor... aber du gibst selbst wenn du h setzt nur 0 zurück.
versuch in der letzten Zeile statt return 0; return h;
 
Dankeschön hab die Lösung gefunden ;-)

Ich habe aich in der Materialklasse die beiden variablen abtid und tid in int Variablen umgewandelt.

Code:
Collections.sort(ma_list, new Comparator(){
    	    public int compare(Object o1, Object o2) {
    	        int i = 0;
    	        Mitarbeiterauflistung ma1 = (Mitarbeiterauflistung) o1;
    	        Mitarbeiterauflistung ma2 = (Mitarbeiterauflistung) o2;
    	        if(ma1.getAbtid() > ma2.getAbtid()){
    	            i = 1;
    	        } else if(ma1.getAbtid() < ma2.getAbtid()){
    	            i = -1;
    	        }
    	        if(i == 0){
    	            if(ma1.getTid() > ma2.getTid()){
    	                i = 1;
    	            } else if(ma1.getTid() < ma2.getTid()){
    	                i = -1;
    	            }
    	            if(i == 0){
    	                i = prepairForCompare(ma1.getManame()).compareTo(prepairForCompare(ma2.getManame())); 
    	            }
    	        }
    	        return i;
    	    }
 
Zurück