Datenselektion mit der »Predicate«-Schnittstelle

Cepheus

Mitglied
Als Lernender bin ich beim Thema Lambda-Schnittstellen im Paket java.util.function angekommen. Ich habe probiert, folgenden Code praktisch nachvollziehen, aber offensichtich ist im Code ein Fehler. Könnte mir bitte jemand helfen?

Java:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
// Datenselektion mit der »Predicate«-Schnittstelle:
// printNumbers gibt in einer Zeile alle Zahlen aus 'data' aus, für die 'condition' zutrifft.
public class Main {
    public static void main(String[] args) {

        public static void printNumbers(List<Integer> lst, Predicate<Integer> condition) {
            for(Integer item : lst)
                if(condition.test(item))
                    System.out.print(item + " ");
            // zum Schluss neue Zeile beginnen
            System.out.println();
        }

        var data = new ArrayList<Integer>();
        for(int i=1; i<100; i++)  // data = [1, 2, 3, ..., 100]
            data.add(i);

        // Aufruf von printNumbers() mit diversen Lambda-Ausdrücken

        // alle Zahlen kleiner 10 ausgeben
        System.out.println("Kleiner 10");
        printNumbers(data, n -> n < 10);

        // alle gerade Zahlen ausgeben
        System.out.println("Gerade");
        printNumbers(data, n -> n % 2 == 0);

        // alle Quadrate ausgeben
        System.out.println("Quadratzahlen");
        printNumbers(data, n -> (int)Math.sqrt(n) * (int)Math.sqrt(n) == n);
    }
}
 
Du kannst nicht innerhalb einer Methode eine neue erstellen.
Zeile 9 -15 sollte nicht in der main Methode sein.

das sollte nach Zeile 34 , nach der Klammer von der main sein
 
Zuletzt bearbeitet:
Java:
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
// Datenselektion mit der »Predicate«-Schnittstelle:
// printNumbers gibt in einer Zeile alle Zahlen aus 'data' aus, für die 'condition' zutrifft.
public class Main {
    
        public static void printNumbers(List<Integer> lst, Predicate<Integer> condition) {
            for(Integer item : lst)
                if(condition.test(item))
                    System.out.print(item + " ");
            // zum Schluss neue Zeile beginnen
            System.out.println();
        }

     public static void main(String[] args) {

        var data = new ArrayList<Integer>();
        for(int i=1; i<100; i++)  // data = [1, 2, 3, ..., 100]
            data.add(i);

        // Aufruf von printNumbers() mit diversen Lambda-Ausdrücken

        // alle Zahlen kleiner 10 ausgeben
        System.out.println("Kleiner 10");
        printNumbers(data, n -> n < 10);

        // alle gerade Zahlen ausgeben
        System.out.println("Gerade");
        printNumbers(data, n -> n % 2 == 0);

        // alle Quadrate ausgeben
        System.out.println("Quadratzahlen");
        printNumbers(data, n -> (int)Math.sqrt(n) * (int)Math.sqrt(n) == n);
    }
}
 
dein Programm wird so aber auch nicht laufen schaue dir nochmal an wie das mit dem interface get.
 
dein Programm wird so aber auch nicht laufen schaue dir nochmal an wie das mit dem interface get.
Doch, das Programm arbeitet richtig.
 

Zurück
Oben