Bei forEach Index des Elements ermitteln

Diskutiere Bei forEach Index des Elements ermitteln im Java Basics - Anfänger-Themen Bereich.
H

hk

Ich habe eine zweidimensionale ArrayList die ich mit forEach abarbeite und bei bestimmten Elementen deren Indexnr. abspeichern möchte. In der Folge ein Code-Beispiel:
Java:
ArrayList<ArrayList<Integer>> workList = new ArrayList<>();
        for(int i = 0; i < NUMBERS; i++) workList.add(new ArrayList<>());
        workList.get(0).add(1);
        workList.get(0).add(2);
        workList.get(0).add(3);
        
        for(int value : workList.get(0)) {
            if(value == 2) // HIER MÖCHTE ICH DEN INDEX DES ELEMENTS ERMITTELN
        }
lg heinz
 
krgewb

krgewb

Dazu brauchst du eine Variable, z.B. int counter, die du schon vorher (also außerhalb der Schleife) deklarierst. In der for-Schleife musst du dann counter++ schreiben.
 
mrBrown

mrBrown

Nimm statt for-each einfach eine normale for-Schleife? Wenn du den Index brauchst, ist for-each doch unpassend.
 
I

insert2020

Außerdem ist bei dem Vergleich von Integer mit == aufzupassen...
 
I

insert2020

Wo ist das Problem?
Dich rettet quasi nur das Auto-Unboxing bei einem Vergleich mit einem int Literal. Beim Vergleich von zwei Integer musst du in nahezu allen Fällen immer .intValue() aufrufen - und das wird gerne vergessen.

https://www.geeksforgeeks.org/integer-intvalue-method-in-java/
 
O

Oneixee5

Wenn dir eine zusätzliche Variable zu "unelegant" ist, dann kannst du folgendes versuchen
Java:
        IntStream
            .range(0, workList.get(0).size())
            .filter(i -> Objects.equals(workList.get(0).get(i), 2))
            .forEach(i -> System.out.println(
                String.format("index: %s, value: %s", i, workList.get(0).get(i))));
 
H

hk

Wenn dir eine zusätzliche Variable zu "unelegant" ist, dann kannst du folgendes versuchen
Java:
        IntStream
            .range(0, workList.get(0).size())
            .filter(i -> Objects.equals(workList.get(0).get(i), 2))
            .forEach(i -> System.out.println(
                String.format("index: %s, value: %s", i, workList.get(0).get(i))));
Danke
 
I

insert2020

Also die Danke-Funktion ist gut, zusätzlich Danke sagen auch... ... aber dann doch bitte nicht noch mal ein drittes Mal sich mit Doppelposting bedanken... das wird dann unübersichtlich...

Hier auch noch mal gekapselt
Java:
	public static void printFirstSublist(List<List<Integer>> workList) {
		// without index
		// workList.get(0).stream().filter(i -> i == 2).forEach(System.out::println);

		// with index
		List<Integer> first = workList.get(0);
		IntStream.range(0, first.size())
				 .filter(i -> first.get(i) == 2)
				 .forEach(i -> System.out.printf("index: %s, value: %s\n", i, first.get(i)));
	}
... Aaaaber, was hast du eigentlich vor? ;)
 
H

hk

Also die Danke-Funktion ist gut, zusätzlich Danke sagen auch... ... aber dann doch bitte nicht noch mal ein drittes Mal sich mit Doppelposting bedanken... das wird dann unübersichtlich...

Hier auch noch mal gekapselt
Java:
    public static void printFirstSublist(List<List<Integer>> workList) {
        // without index
        // workList.get(0).stream().filter(i -> i == 2).forEach(System.out::println);

        // with index
        List<Integer> first = workList.get(0);
        IntStream.range(0, first.size())
                 .filter(i -> first.get(i) == 2)
                 .forEach(i -> System.out.printf("index: %s, value: %s\n", i, first.get(i)));
    }
... Aaaaber, was hast du eigentlich vor? ;)
Ich arbeite an einem Programm welches Sudoku erstellt und auch lösen kann. Bei der gestellten Frage werden die nicht mehr möglichen Ziffern aus den möglichen Ziffern der Felder entfernt. Also suchen - finden - markieren.
Ich wollte eigentlich nur hinterfragen ob es eine "elegantere" Lösung mit dem forEach - ev. Iterator - gibt,
lg heinz
 
I

insert2020

Ja, es gibt eine elegantere Lösung bei Sudoku... und diese nennt sich Array -> schneller, sicherer, einfacher, robuster. Da Sudokus eine feste Länge haben sind Lists hierbei unpassend.
 
Thema: 

Bei forEach Index des Elements ermitteln

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben