Java: Älteste Objekt ausgeben wie geht das?

4 Antworten

Wenn du einfach nur zwei int-Werte hast, kannst du mit Math.min die kleinere Zahl kriegen:

int a = 1980;
int b = 1990;

int oldest = Math.min(a,b);

Wenn es Datum-Objekte sind, gibt es die Funktionen .isBefore und .isAfter, mit denen du das Ältere rauskriegen kannst:

LocalDate a = LocalDate.of(1980, 1, 1);
LocalDate b = LocalDate.of(1990, 1, 1);

LocalDate oldest = a.isBefore(b) ? a:b;

oder mit if:

LocalDate a = LocalDate.of(1980, 1, 1);
LocalDate b = LocalDate.of(1990, 1, 1);

LocalDate oldest = a;
if (b.isBefore(oldest)) 
	oldest = b;

Ich denke aber mal, dass du eine ganze Liste mit irgendwelchen Objekten hast, von denen in einer Eigenschaft das Erscheinungsdatum steht und du aus der Liste das älteste haben willst. Das würde ich am ehesten mit einem Stream lösen:

import java.time.*;
import java.util.*;


record Movie(String name, LocalDate publishedDate) {}


public class SortDates {
    public static void main(String[] args) {
        // Liste von Filmen erzeugen
        List<Movie> movies = List.of(
            new Movie("Doctor Strange in the Multiverse of Madness", LocalDate.of(2022, 5, 6)),
            new Movie("Top Gun 2: Maverick", LocalDate.of(2022, 5, 27)),
            new Movie("Jurassic World: Dominion", LocalDate.of(2022, 6, 10)),
            new Movie("Thor 4: Love and Thunder", LocalDate.of(2022, 7, 7)),
            new Movie("Mission: Impossible 7", LocalDate.of(2022, 9, 30)),
            new Movie("Avatar 2", LocalDate.of(2022, 12, 16))
        );
        
        // den Film mit dem kleinsten "publishedDate" raussuchen
        Movie oldest = movies.stream().min(Comparator.comparing(Movie::publishedDate)).get();
        
        // und ausgeben
        System.out.printf("Der älteste Film ist \"%s\". Er ist am %td.%<tm.%<tY erschienen.%n", oldest.name(), oldest.publishedDate());
    }
}

Die beiden Werte müssen als numerischer Typ bereitstehen, dann kannst du sie mittels mathematischer Operatoren miteinander vergleichen.

int year1 = 1980;
int year2 = 1990;

if (year1 < year2) {
  // year1 is older ...
}

Wenn die Jahre nur als String vorliegen, konvertiere sie erst.

String year1AsString = "1980";
String year2AsString = "1990";
int year1, year2;

try {
  year1 = Integer.parseInt(year1AsString);
  year2 = Integer.parseInt(year2AsString);
}
catch (NumberFormatException ex) {
  // conversion error ...
}

Ansonsten könnte ich mir noch den Anwendungsfall vorstellen, dass die Werte in irgendeinem Date-Objekt liegen. Du brauchst in diesem Fall einen Getter, der dir den Wert des Feldes liefert.

Beispiel mit LocalDate:

LocalDate localDate = LocalDate.of(1990, 1, 1);
int year = localDate.getYear();

Beispiel: public boolean equals(Object obj){

if(obj instance of P){

P k = (P) obj;

return (x == k.x) && (y == k.y);

Objekte vergleicht man, wenn du es in die if Zuweisung tust. Dann kommt der grösser/kleiner Operator dazwischen.

Dies machst du in der if Zuweisung, und in den geschweiften klammern kommt die Ausgabe

Woher ich das weiß:Hobby