Also Tobias (Baubär) meint, dass Streams generell besser sind. Das zeigen auch ältere Posts von ihm, wo irgendwelche komplexen Stream-Lösungen gebaut und für gut befunden wurden. Code muss lesbar sein und es macht schlicht keinen Sinn, auf Zwang irgend was mit Streams abzubilden. Effective Java hatte da als Beispiel die Erstellung eines Streams nur um dann forEach aufzurufen meine ich.
Was mir an Deiner Lösung etwas missfällt ist die Trennung vom index von der Schleife. Das ist zwar schön kompakt, aber wenn der Code aus irgend einem Grund aufgebläht wird und dann index noch irgendwie zusätzlich angepasst würde, dann wäre es blöd.
Zugriff über den Index sollte auch unproblematisch sein, wenn es ein String Array ist. Aber ich frage mich gerade, wieso da ein Durchgehen von 2000 Strings irgendwie dauern soll. So ein startsWith ist nicht so aufwändig und sollte schnell gehen. Daher wäre hier wichtig:
a) was genau dauert extrem lange?
b) was bedeutet "extrem lange"?
Im Augenblick zweifle ich etwas, dass es problematisch ist, 2000 Strings mit starts with zu prüfen.