Bei forEach Index des Elements ermitteln

hk

Bekanntes Mitglied
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
 
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.
 
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))));
 
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
 
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? 😉
 
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
 
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.
 

Zurück
Oben