Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Получение индекса первого not null элемента массива

#java


Есть какой-нибудь красивый способ получения индекса первого not null элемента массива?
Да, можно написать

int index;
for (int i = 0; i < arr.length; i++) {
   if (arr[i] != null) {
       index = i;
       break;
   }
}


но, может, есть какой-нибудь более красивый способ для этого? Например, для получения
первого not null элемента массива есть метод ObjectUtils.firstNonNull, может, есть
что-то похожее и для получения индекса?
    


Ответы

Ответ 1



Можно написать цикл чуть короче: int index = 0; while (index < arr.length && arr[index] == null) ++index; Или даже: int index = -1; while (++index < arr.length && arr[index] == null) {} Или вот вариант с for (спасибо @Qwertiy!): int index; for (index = 0; index < arr.length && arr[index] == null; ++index); Также можно написать свой метод для этого, использующий любой из способов выше, либо вот так (Ideone): static int firstNotNullIndex(T[] arr) { for (int i = 0; i < arr.length; ++i) if (arr[i] != null) return i; // или `return -1` return arr.length; }

Ответ 2



Может так (java 8, для String)?: Arrays.asList(array).indexOf(Arrays.stream(array).filter(Objects::nonNull).findFirst().get())

Ответ 3



По-моему, вот самое изящное решение (благодаря помощи англоязычного SO): int titleIndex = IntStream.range(0, arr.length) .filter(i -> arr[i] != null) .findFirst().getAsInt();

Комментариев нет:

Отправить комментарий