Lambda Ausdrücke richtig schreiben

n01sp

Mitglied
Hey,
also ich habe hier ein Programm was Daten aus einer CSV- Datei ausliest nun wollte ich alle ortsteile, in denen mehr als 2000 Männer im 25-30 leben, filtern und ausgeben, aber statdessen rieg ich die Pipeline-Referenz.

Java:
public void Mann() throws IOException {
    BufferedReader reader = new BufferedReader(new FileReader(csvFile));
    String line;
    reader.readLine(); // remove the headerline
    while ((line = reader.readLine()) != null) {
        dataset.add(new CSVDataEntry(line));
   
    }
    System.out.println( dataset.stream().filter(p -> p.geschlecht ==1 && p.altersgruppe.equals("25_30") && p.hauefigkeit> 2000)
           
            .map(e -> e.ortsname.toString()));
 
Du hast nach dem map-Aufruf nunmal noch einen Stream aus Strings. Wie willst du diese String denn ausgeben? Eine Möglichkeit wäre z.b. mit Collectors::joining die Strings mit einem Trennzeichen zu verknüpfen:
Java:
System.out.println( dataset.stream().filter(p -> p.geschlecht ==1 && p.altersgruppe.equals("25_30") && p.hauefigkeit> 2000)
            .map(e -> e.ortsname.toString())
            .collect(Collectors.joining(", ")))
lg Kevin
 
Naja das Problem sind ja nur die Strings mit nem Double geht das ja ziemlich einfach.

Java:
System.out.println(dataset.stream().filter(p -> p.ortsname.equals("Wedding") && p.staatsangeh.equals("A")).mapToDouble(e -> e.getHauefigkeit()).sum());

Wollte nur wissen ob es so etwas auch für Strings auch gibt.
 
Da benutzt du am Ende ja auch eine terminierende Operation 'sum'. Es ist halt die Frage, was du mit diesem Strings genau machen willst. 'collect' ist da immer der erste Ansprechpartner, wenn es darum geht, diese Daten wieder in eine feste Datenstruktur zu packen. Neben 'joining' gibt es da z.b. auch ein 'toList', um die Strings in eine Liste von Strings zu packen, und einige andere: https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html
 

Zurück
Oben