Existe uma maneira concisa de iterar em um fluxo com índices no Java 8?

Existe uma maneira concisa de iterar em um fluxo enquanto se tem acesso ao índice no fluxo?

String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};

List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
        .filter(e -> e.getValue().length() <= e.getKey())
        .map(Entry::getValue)
        .collect(toList());

o que parece um pouco decepcionante comparado ao exemplo LINQ dado lá

string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index + 1).ToList();

Existe uma maneira mais concisa?

Além disso, parece que o zip foi movido ou removido ...

questionAnswers(17)

yourAnswerToTheQuestion