Externe Comperator-Klasse

Doom Mortal

Mitglied
Hallo liebe Leute ich komme leider mit den Ausführungen meines Lehrers nicht weiter.
Das Stichwort meines Lehrers ist eine externe Comperator-Klasse.
Er möchte, das habe ich verstanden den Prozess von ausgelagerten Klassen bis hin zu internen Klassen und dann zu den Lamda ausdrücken schlagen. Ich scheitere aber an der Implementierung der externen Comperator Klasse wie muss ich diese Importen. In der externen Comperator Klasse habe ich die Funktion compare diese soll durch die Funktion in der Anwendungsklasse genutzt werden.
Kann mir jemand helfen ??🙁

Fachklasse
Java:
package film;

public class Film implements Comparable<Film>{
  
  private String titel;
  private int jahr;
  private Integer laenge;
  
  public Film (String titel, int jahr, int laenge) {
    this.titel = titel;
    this.jahr = jahr;
    this.laenge = laenge;
    
  }
  
  public String getTitel(){
    return titel;
  }
  
  public int getJahr(){
    return jahr;
  }
  
  public int getLaenge(){
    return laenge;
  }
  
  @Override
  public String toString() {
    return titel + ": " + jahr + " . Laenge: " + laenge;
  }
  
  //@Override
  //public int compareTo(Film anderer) {
    
   // return laenge.compareTo(anderer.laenge);
  //}
  
  
  
  
  
  
}

Externe Comperator-Klasse:
Java:
import java.util.*;
import film.Film;

public class FilmSortierer implements java.util.Comparator<Film> {
  
  @Override
  public int compare(Film dieser, Film anderer) {
    return dieser.getLaenge().compareTo(anderer.getLaenge());
  }
}

Anwendungsklasse (anonymes Comperator Objekt)
Java:
import film.Film;
import film.FilmSortierer;
import javax.swing.*;
import java.util.*;

public class FilmAusgabe {
  
  public static void main(String[] args){
    
    Film[] myArray = new Film[4];
    
    myArray[0] = new Film("Star Wars: Episode I - Die dunle Bedrohung",1999,131);
    myArray[1] = new Film("Star Wars: Episode III - Die Rache der Sith",2005,134);
    myArray[2] = new Film("Star Wars: Episode IV - Eine neue Hoffnung",1977,116);
    myArray[3] = new Film("Star Wars: Episode V - Das Imperium schlägt zurück",1980,124);
    
    Arrays.sort(myArray, new FilmSortierer());
    
    String ausgabe = "";
    for (int i=0;i<=myArray.length-1 ;i++ ) {
      ausgabe = ausgabe + myArray[i].getTitel() + ", " + myArray[i].getJahr() + ", " + myArray[i].getLaenge() + "\n";
    } // end of for
    
    
    JOptionPane.showMessageDialog(null, ausgabe);
    
    
    
  }
  
  
  
  
  
}
 
Erstmal danke für deine Hilfe das Problem zu verstehen. Ich habe hier ein kleines Bild vorbereitet Klick das mein Problem etwas näher beschreibt.

Methoden die in der Comperator-Klasse sind wie zum Beispiel dieser.getName() sind sind bestandteil der Fachklasse oben. Ich müsste jetzt eigentlich die obere Fachklasse importieren um zugrif auf die Methoden zu haben. Aber wie mache ich das ?
Da die Obere und die untere Klasse im selben Package Verzeichnis liegen
 
In deiner Comperator Klasse gibt es genau eine Methode ?!

Ich glaube wir verstehen nicht ganz worauf du hinaus möchtest, du implementierst in der Film klasse Compareable, heißt diese klasse ist über einen Comperator verlgeichbar, da deine Methode im Coperator nicht statisch ist musst du diesen Instanzieren.

Ich habe hier auf richtige Implementierung der compareTo und compare Methoden verzichtet und führe lediglich einen Referenzvergleich durch , es geht ja nur darum das du siehst wie du die Klassen benutzt.


Film :

Java:
public class Film implements Comparable<Film> {

	@Override
	public int compareTo(Film o) {
		if (this == o) {
			return 1;
		}
		return 0;
	}

  //....usw..
}

FilmComparator :

Java:
import java.util.Comparator;

public class FilmComparator implements Comparator<Film>{

	@Override
	public int compare(Film o1, Film o2) {
		if (o1 == o2) {
			return 1;
		}
		return 0;
	}

}

Anwendungsklasse :

Java:
public class FilmTest {
	
	public FilmTest() {
		// TODO Auto-generated constructor stub
	}
	
	public static void main(String[] args) {
		Film one = new Film(); // Film erstellen
		Film two = new Film(); // anderen Film erstellen
		
		FilmComparator comp = new FilmComparator(); //Comparator erstellen
		
		System.out.println(comp.compare(one, two)); //Referenzen vergleichen
		
		//oder auch einfach 
		
		System.out.println(one.compareTo(two)); //ohne Comparator
	}

}
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben