Wie kann ich das eleganter/universeller lösen

Diskutiere Wie kann ich das eleganter/universeller lösen im Allgemeine Java-Themen Bereich.
Zrebna

Zrebna

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

Zrebna

Zrebna

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

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

mihe7

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

Zrebna

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

Zrebna

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

mihe7

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

Zrebna

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

Wie kann ich das eleganter/universeller lösen

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben