Вот другой подход для получения самой длинной строки и ее индекса одновременно:
String[] names = {"John", "Malisa", "Stack Overflow"};
Optional<Map.Entry<String, Integer>> result = IntStream.range(0, names.length).boxed()
.collect(Collectors.toMap(i -> names[i], Function.identity()))
.entrySet().stream()
.max(Comparator.comparing(e -> e.getKey().length()));
result.ifPresent(e -> System.out.println("Longest String: '" + e.getKey() + "' at index " + e.getValue()));
Это создает карту со строкой и ее индексом.После этого он возвращает запись с самой длинной строкой.
Результат для вашего массива names
:
Longest String: 'Stack Overflow' at index 2