Этот код создает поток по индексам массива с помощью IntStream.range, фильтрует индексы, чтобы сохранить только те, в которых элемент массива с этим индексом равен искомому значению, и, наконец, сохраняет соответствие первому элементу с помощью findFirst. findFirst возвращает значение OptionalInt, поскольку возможно, что совпадающие индексы не были найдены. Поэтому мы вызываем orElse(-1) либо для возврата найденного значения, либо -1 если ничего не найдено.
Могут быть добавлены перегрузки для int[], long[] и т.д. Тело метода останется прежним.
Для массивов объектов
Для массивов объектов, таких как String[], мы могли бы использовать ту же идею и выполнить этап фильтрации с использованием equals метода или Objects.equals считать два null элемента равными, вместо ==.
Но мы можем сделать это более простым способом с помощью:
publicstatic <T> intindexOf(T[] arr, T val) { return Arrays.asList(arr).indexOf(val); }
Это создает оболочку списка для входного массива с помощью Arrays.asList и выполняет поиск по индексу элемента с помощью indexOf.
Это решение не работает для примитивных массивов, как показано здесь: примитивный массив типа int[] это не an Object[], а an Object; таким образом, вызов asList для него создает список из одного элемента, который является данным массивом, а не список элементов массива.
Ответ 4
Это даже недопустимый синтаксис. И вы пытаетесь сравнить со строкой. Для массивов вам пришлось бы обходить массив самостоятельно.: