Wie man element-index bei der Verwendung eines stream-Kettenlaufwerk auf eine Liste?
Möchte ich, um index, wenn die traverse Liste lambda.
Beispiel:
List<CheckBox> checkBoxes = null;
checkBoxes.forEach(checkBox -> {
if (checkBox.isSelected()) {
sb.append("index"); //I want to get checkbox index here
sb.append(",");
}
});
BEARBEITEN: Die checkBoxes = null;
ist nur ein Platzhalter, aber werden Sie richtig eingesetzt, nachdem ich einige code schreiben.
- Code da ist wäre völlig werfen
Null pointer Exception
- lambda funktioniert nicht für alle Fälle, aber mit einer traditionellen
for
Schleife wäre am besten für Ihren Fall. - Ich weiß. Es ist nur ein Beispiel . Ich werde nicht schreiben, wie das in meinem code .
- Ich brauche generieren mais-Ausdruck für alarm, wiederholen Sie jede Woche.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist, wie ich es tun würde.
Ausführen einer
IntStream
über die Indizes der Liste. Dann filter der Indizes basierend auf, ob das entsprechende Kontrollkästchen aktiviert ist. Dann Karte der index-Wert, einint
, in eineString
Darstellung der index-Wert. Schließlich, sammeln Sie die Zeichenfolgen in einem Ergebnis-string, getrennt durch Kommas.Code:
Ist die Ausgabe etwas wie
je nachdem, welche Checkboxen sind tatsächlich geprüft wird.
Ich würde vermeiden, mit
forEach
da Sie erreichen das Ziel durch die Umwandlung der Werte anstelle der Durchführung Nebenwirkungen. Ich würde auch vermeidenList.indexOf
da, dass die Suche nach der Liste Linear für das gewünschte Element. Es ist nicht eine große Sache, wenn Sie nur ein paar Checkboxen, aber wenn Sie eine Menge von O(N^2) Wachstum wird dazu führen, dass Leistung zu leiden.Versuchen, diese mit
IntStream
:versuchen
lambda nicht Arbeit für alle Fälle, ich würde empfehlen, mit einer herkömmlichen for-Schleife.
Jedoch, wenn Sie darauf bestehen, mit streams, die Sie benutzen müssen
indexOf
Methode zur Verfügung gestellt von derList
um die entsprechende index für das jeweilige element.