Längstes Element einer ArrayList ausgeben

lubi27X

Aktives Mitglied
Guten Tag liebes Java Team. Wie kann ich die Länge eines Arrays prüfen, bzw mir nur das Längste Element anzeigen lassen?
Habe hier eine Datei mit Namen angelegt und möchte nun, dass die Namen in der Datei nach Größe kontrolliert werden und nur der Längste Namen ausgegeben wird.
In diesem Fall wäre es "Dagobert". Ich habe eine txt. Datei angelegt und diese mit 4 Namen gefüttert. Nun möchte ich in der Methode "public static void LaengsteWort(List<String> liste)" das Längste Wort der Datei ermitteln.

Java:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class main {
    
    public static void LaengsteWort(List<String> liste) {
        
        for (int i = 0; i < liste.size(); i++)
        {
//            if (liste.get(i) > liste.get(i+1))
//            {
//                 
//            }
//               
//            System.out.println(liste.get(i));
        }
        
        for (String n: liste)
        {
            
            System.out.println(n.length());
        }
        
        
//        Object object1 = liste;
//        System.out.println(liste);
    }

    public static void main(String[] args) {
        
        try
        {
            String filename = "C:\\Users\\Admin\\eclipse-workspace\\Übung_8-Aufgabe_2\\src\\Name";
            List<String> lines = Files.readAllLines(Paths.get(filename));
//            System.out.println(lines);
            
            LaengsteWort(lines);
            
        }
        catch (IOException e)    //IOException, weil reaAllLines eine IOException wirft
        {
            System.out.println("Dokument exestiert nicht");
        }
        
        
    }

}
[CODE lang="java" title="Name"]Hans
Gustav
Merkels
Dagobert[/CODE]
 
Merke dir einfach das erste Wort in einer Variablen (außerhalb der Schleife deklariert). Wenn das nächste Wort länger ist, dann ersetzt du den Wert der Variablen einfach durch das neue Wort, usw. Somit findest du das längste Wort am Ende in der Variablen.
 
Java:
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.List;
    import java.util.Scanner;
    
    public class main {
        
        public static void LaengsteWort(List<String> liste) {
            
            String first = liste.get(0);
            System.out.println(first);
            
            for (int i = 0; i < liste.size(); i++)
            {
                if (liste.get(i).length() > first.length())
                {
                    first = liste.get(i);
                    System.out.println(first);
                }
                else
                {
                    
                }
            }
        }

Verstehe nicht so recht was in den else Block soll.
Wenn der nächste Wert nicht größer ist, soll er ja eigentlich nichts tun
 
Wenn er nichts tun soll, was könnte da dann rein in den Block bzw. was kann man dann machen? Du hast die Antwort doch eigentlich schon ....
 
Ja super, ihr habt mir wieder geholfen es läuft. Habe jetzt einfach den else Block leer gelassen.
Gibt es aber keine elegantere Lösung, um bei ArrayLists nach der Größe sortieren? Die bieten ja eigentlich ziemlich viele Funktionen. Aber irgendwie bin ich auf keine gekommen.
 
Ja super, ihr habt mir wieder geholfen es läuft. Habe jetzt einfach den else Block leer gelassen.
Gibt es aber keine elegantere Lösung, um bei ArrayLists nach der Größe sortieren? Die bieten ja eigentlich ziemlich viele Funktionen. Aber irgendwie bin ich auf keine gekommen.
Also einen leeren else Block kannst Du auch einfach weglassen.... Ein if braucht kein else.

Und ein Array mit Strings zu sortieren ist natürlich etwas anderes, als das längste Elemente zu bekommen... Aber mit einem einfachen Comparator kannst Du da schnell sortieren, also als Comparator etws angeben wie:
Comparator.comparingInt(String::length)
was in etws länger dem folgenden Lambda entspricht:
(s1, s2) -> Integer.compare(s1.length(), s2.length())
 
Das hört sich ja mal spannend an. Das Thema Lambda haben wir noch nicht, wird aber bald kommen.. Probiere es später mal aus danke.
Da ist wichtig, dass Du das Vorgehen bei den Interfaces Comparator und Comparable verstanden hast ... (Hier natürlich das erstere). Denn das ist halt etwas, das man angeben kann. Und da Comparator nur eine Methode verlangt, ist es möglich, diese als Lambda Ausdruck darzustellen. Stichwort: funktionales Interface. Das nur noch als zusätzliche Erläuterung, denn ohne das ist der Lambda so nicht wirklich verständlich.
 

Zurück
Oben