Wie kann ich das eleganter/universeller lösen

Zrebna

Bekanntes Mitglied
Hi!

Es geht darum, aus einer Liste mit z.B. Namen einen Stream zu erzeugen und nur jeweils das erste Ergebnis der Liste printen, welches eine bestimmte Länge x hat.
Falls kein Element der Länge x in der Liste bzw. nun im Stream enthalten ist, soll eine passende Meldung erscheinen - so habe ich es gelöst:

Java:
  int len = 11;
       Optional<String> found = cities.stream()
                .filter(e -> e.length() == len).findFirst();
       if(found.isPresent())
           System.out.println(found.get());
       else
           System.out.println("no city name of length " + len);

Es funktioniert, jedoch möchte ich quasi es so haben, dass nicht vorher eine Variable 'len' deklariert und initialisiert werden muss,
und ich im 'Sytem.out.println'-Snippet des else-cases, auf 'Länge' zugreifen kann - ich denke in einem Bild wird es versändlicher - siehe Anhang.

Weiß Jemand, wie das geht?

Lg,
Zrebna
 

Anhänge

  • Optional_output.PNG
    Optional_output.PNG
    20 KB · Aufrufe: 14

Zrebna

Bekanntes Mitglied
Alles klar,
dache es gäbe da evtl. noch eine andere Möglichkeit^^

Danke jedenfalls für die schnelle Aufklärung:)
 

mihe7

Top Contributor
Java:
public static void findCityByLength(int len) {
    System.out.println(cities.stream().filter(e -> e.length() == len).findFirst()
            .orElse("no city name of length " + len));
}

Und dann
Java:
findCityByLength(11);

:)
 

Zrebna

Bekanntes Mitglied
Hey, cool - thanks -> orElse innerhalb Output kannte ich noch gar nicht - nice:)

PS.: Musste aber noch bzgl. deinem Codesnippet eben die cities-Liste übergeben, sonst kann man in der Methode keinen Stream von dieser erzeugen.

PS2: Oder die Liste einfach mit Modifier static ausserhalb der Main erzeugen...
 

Zrebna

Bekanntes Mitglied
Wobei, das geht nicht, weil man innerhalb einer non-static methode nicht auf ein Objekt zugreifen kann, welches innerhalb einer static Methode (main) erzeugt wurde?
Ich hab nun das "static" bei deiner Methode weggelassen, aber dann meckert die IDE...
 

mihe7

Top Contributor
Wobei, das geht nicht, weil man innerhalb einer non-static methode nicht auf ein Objekt zugreifen kann, welches innerhalb einer static Methode (main) erzeugt wurde?
Ich dachte, cities wäre eine Instanzvariable. Wenn das nur eine lokale Variable in main ist, dann kannst Du tatsächlich einfach static vor die Methode setzen und cities als Parameter übergeben. Es macht in dem Fall wenig Sinn, zuerst ein Objekt der Klasse zu erzeugen, um dann die Methode dann mit Parametern aufzurufen.

Java:
public class CityFinder {
    private final List<String> cities;

    public CityFinder(List<String> cities) {
        this.cities = cities;
    }

    public void findCityByLength(int len) {
        System.out.println(cities.stream().filter(e -> e.length() == len).findFirst()
                .orElse("no city name of length " + len));
    }

    public static void main(String[] args) {
        CityFinder finder = new CityFinder(List.of("Hamburg", "Berlin", "München", "Wanne-Eickel"));
        finder.findCityByLength(12);
    }
}
 

Zrebna

Bekanntes Mitglied
Ja, sry - genau, ist nur eine lokale Variable gewesen.
Aner danke für deinen Lösungsvorschlag incl. Codesnippet - gefällt! :)
 

Ähnliche Java Themen

Neue Themen


Oben