Iterationsdurchlauf abbrechen

SaschaMeyer

Mitglied
Ich habe in einer mehrere Datenobjekte z.B.

Java:
class MyClass {
    private String name;
    // noch irgendwelche weitere attribute
   
    // und die Getter/Setter Methoden dazu
}

jetzt kann ich ja z.B. über Iteration mir eine Schleife bauen z.B.
Java:
for (MyClass mc : list) {
    if (mc.name == "Huge") break;
}

wie mache ich es aber über funktionale list.forEach???

Der ganze Hintergrund ist folgendes: Wenn z.B. "Hugo" auf Platz 6 in meiner Liste steht, denn es soll ein Zähler mitlaufen, der bei "Hugo" (also z.B. 6) abbricht und mir diesen Index zurückgibt.
 

kneitzel

Top Contributor
Wenn z.B. "Hugo" auf Platz 6 in meiner Liste steht, denn es soll ein Zähler mitlaufen, der bei "Hugo" (also z.B. 6) abbricht und mir diesen Index zurückgibt.
Generell bei sowas: Teile und Herrsche! Also zerlegen es in Teilprobleme.

Hier also einfach eine Methode bauen, die durch die Elemente geht und bei einem Trefger den Index zurück gibt. Und wenn die Scjlwife durchlaufen wurde ohne Treffer, dann halt ein return -1 oder so.

Das ist bei derSoftware Entwicklung existenziel! Das ist ein wichtiges Mittel für lesbaren Code.

Ansonsten ist natürlich auch noch wichtig: kenne das Framework!

Und aufpassen mit den neuen funktionalen Bestandteilen - diese nicht auf Zwang einsetzen. List.forEach ist ebenso unangebracht wie die Foreach Schleife, wenn dir der Index wichtig ist. Da ist die traditionelle for Schleife, die Index orientiert ist, doch naheliegend, oder?
 

SaschaMeyer

Mitglied
Generell bei sowas: Teile und Herrsche! Also zerlegen es in Teilprobleme.

Hier also einfach eine Methode bauen, die durch die Elemente geht und bei einem Trefger den Index zurück gibt. Und wenn die Scjlwife durchlaufen wurde ohne Treffer, dann halt ein return -1 oder so.

Das ist bei derSoftware Entwicklung existenziel! Das ist ein wichtiges Mittel für lesbaren Code.

Ansonsten ist natürlich auch noch wichtig: kenne das Framework!

Und aufpassen mit den neuen funktionalen Bestandteilen - diese nicht auf Zwang einsetzen. List.forEach ist ebenso unangebracht wie die Foreach Schleife, wenn dir der Index wichtig ist. Da ist die traditionelle for Schleife, die Index orientiert ist, doch naheliegend, oder?
Dieses ist mir alles soweit bekannt. Aber ich frage mich wie würde man es mit forEach funktionell umsetzen? Und ja du hast du hast natürlich Recht, es müsste equals vergleich erfolgen.
 
Zuletzt bearbeitet:

kneitzel

Top Contributor
Ist deine Tastatur möglicherweise kaputt oder bist betrunken? :D
Weder noch, ganz trivial ein zu kleines Smartphone mit zu kleinen Tasten / zu kleiner Schrift.

wie würde man es mit forEach funktionell umsetzen?
Dann schau Dir die forEach Methode doch einfach mal an. Das ist eine Methode wie jede Andere auch:
forEach von List ist geerbt von Iterable: https://docs.oracle.com/en/java/jav...ble.html#forEach(java.util.function.Consumer)

Und die Methode hat einen Parameter vom Typ Consumer<T>.

Und damit hat man dann alle Möglichkeiten, die es so gibt: Du brauchst eine Instanz, die auch dieses Interface implementiert. Also kannst Du schauen, ob es da etwas fertiges gibt, das macht, was Du brauchst (wohl eher nicht vermutlich) oder Du implementierst es Dir selber:

Java:
public class MeinForEach implements Consumer<MyClass> {
    void accept(MyClass myClass) {
        // Mache hier was mit myClass
    }
}

und dann hast Du halt eine neue Instanz davon zu schaffen und dem forEach zu übergeben.

Das geht auch "abgekürzt" als anonyme Klasse. Dann hast Du etwas wie:
Java:
myList.forEach(new Consumer<String>() {
    void accept(MyClass myClass) {
        // Mache hier was mit myClass
    }
});

Aber so geht man in der Regel nicht vor!

Das Interface hat nur eine Methode, die implementiert werden muss. Da spricht man dann von einem funktionalen Interface.

Da gibt es üblicher Weise zwei weit verbreitete Wege, dies zu nutzen:

a) Lambda Ausdrücke:
Bei einem Lambda Ausdruck werden die Parameter nach Vorne gestellt und die Implementation kommt hinter den ->
Java:
myList.forEach( (elem) -> {
    // Implementation mit elem das aktuelle Element...
});

Auf Grund der Lesbarkeit sollte man hier aber die { } vermeiden, so dass nur noch ein Aufruf bleibt:
Java:
myList.forEach( (elem) -> doSomething(elem);

b) Methoden Referenz:
Du kannst eine Methode schreiben, die mit den Parameter Typen und dem Rückgabe Typ der Methode des funktionalen Interfaces entspricht und dann einfach eine Referenz zu der Methode angeben:
Java:
private void doSomething(MyClass myClass) {
    // Mache hier was mit myClass
}

    // Woanders
    myList.forEach(this::doSomething);

Das wären die Optionen, die Du das forEach mit dem Consumer verwenden kannst.
 

kneitzel

Top Contributor
War ja kein Angriff... hatte mich nur gewundert über das partielle Kauderwelsch. ;)
Schon klar - hatte ich nicht als Angriff gewertet - das Smiley war ja auch nicht zu übersehen. Nur da ich eh im Thread antwortete, wollte ich den Punkt auch kurz beantworten.

Smartphones sind halt blöd - sind entweder zu klein (zum lesen) oder sie sind zu groß (zum mit sich herum tragen).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Java Programm, das kleine Buchstaben in einem String zählen soll und bei großen Buchstaben oder Sonderzeichen abbrechen soll. Java Basics - Anfänger-Themen 5
O Endlosschleife abbrechen Java Basics - Anfänger-Themen 10
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
N Abbrechen einer Eingabe endet im Fehler Java Basics - Anfänger-Themen 3
M Abbrechen Methode ohne return Java Basics - Anfänger-Themen 3
C InputStreamReader Eingabeprozess abbrechen Java Basics - Anfänger-Themen 8
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
Z JTextField - getText() Methode abbrechen? Java Basics - Anfänger-Themen 8
A Gui Abbrechen Butto Java Basics - Anfänger-Themen 6
T thread abbrechen Java Basics - Anfänger-Themen 5
P Klassen Bei KeyEvent in KeyListener den Tastendruck abbrechen Java Basics - Anfänger-Themen 5
E Executorservice abbrechen? Java Basics - Anfänger-Themen 2
P Verschachtelte Schleife vorzeitig abbrechen. Java Basics - Anfänger-Themen 50
A for schleife frühzeitig abbrechen Java Basics - Anfänger-Themen 25
P Methoden Methode ohne return abbrechen? Java Basics - Anfänger-Themen 12
M Methode abbrechen funktioniert nicht?! Java Basics - Anfänger-Themen 2
M readXYZ von DataInputStream abbrechen/timeout auslösen Java Basics - Anfänger-Themen 6
M Objekterstellung abbrechen? Java Basics - Anfänger-Themen 10
F Methode abbrechen Java Basics - Anfänger-Themen 16
R JOptionPane funktioniert nicht mit Abbrechen Knopf Java Basics - Anfänger-Themen 16
J Frame schließen, Ereignis behandeln, Vorgang abbrechen Java Basics - Anfänger-Themen 4
B OOP Objekt klonen (Grundzustand), um in Editor "Abbrechen" zu können Java Basics - Anfänger-Themen 4
S [JAVA] Erstellung eines Objekts abbrechen?! Java Basics - Anfänger-Themen 7
brainray Server abbrechen mit CTRL-C Java Basics - Anfänger-Themen 2
Developer_X Endlos-Schleifen abbrechen Java Basics - Anfänger-Themen 5
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
S Schleife per Tastendruck abbrechen Java Basics - Anfänger-Themen 7
G Wie entferne ich einen "Abbrechen" Button? Java Basics - Anfänger-Themen 6
A JOptionPane -> abbrechen -> NullPointerException Java Basics - Anfänger-Themen 4
S While-Schleife nach 10 sekunden abbrechen. Java Basics - Anfänger-Themen 20
K void Methode abbrechen Java Basics - Anfänger-Themen 7
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
W Schaltjahr abbrechen wenn <1583 Java Basics - Anfänger-Themen 11
G FileNotFoundException beim Drücken des "Abbrechen" Java Basics - Anfänger-Themen 3
B Programm abbrechen Java Basics - Anfänger-Themen 2
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
J Swing Komponente soll Thread starten und abbrechen Java Basics - Anfänger-Themen 6
P FileChooser richtig abbrechen? Java Basics - Anfänger-Themen 3
G REkursion vorzeitig abbrechen Java Basics - Anfänger-Themen 4
G while-Schleife von aussen abbrechen Java Basics - Anfänger-Themen 8
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
G imports einlesen und nach den imports abbrechen Java Basics - Anfänger-Themen 4
L Ablauf abbrechen und zurück Java Basics - Anfänger-Themen 20
V JOP.showInputDialog Abbrechen Button, Exception abfangen Java Basics - Anfänger-Themen 2
G while-Schleife global abbrechen Java Basics - Anfänger-Themen 2
N JOptionPane.showInputDialog Abbrechen abfragen Java Basics - Anfänger-Themen 5
N Konsole: while Schleife durch Tastensruck abbrechen Java Basics - Anfänger-Themen 4
S For-Schleife sauber abbrechen? Java Basics - Anfänger-Themen 9
F Methode abbrechen wie mit break in Schleifen ? Java Basics - Anfänger-Themen 2
S Wie kann ich abbrechen Java Basics - Anfänger-Themen 3
J Schleife vorzeitig abbrechen Java Basics - Anfänger-Themen 7
T Programm so abbrechen, dass finally ausgeführt wird Java Basics - Anfänger-Themen 7
R Abbrechen...aber wie??? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen


Oben