/ / Jak uzyskać indeks pierwszego elementu tablicy innej niż null? - java, tablice

Jak uzyskać indeks pierwszego niezerowego elementu tablicy? - Java, tablice

Czy jest jakiś dobry sposób na uzyskanie indeksu pierwszego elementu tablicy łańcuchowej innej niż null? Tak, możesz pisać

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

ale może można to zrobić w piękniejszy sposób? Na przykład możesz użyć ObjectUtils.firstNonNull metoda, aby uzyskać pierwszy element inny niż null tablicy, może jest coś podobnego do uzyskania indeksu?

Odpowiedzi:

7 dla odpowiedzi № 1

Jedną sztuczką jest utworzenie strumienia indeksów, a następnie znalezienie pierwszego, który wskazuje na wartość inną niż null:

int index =
IntStream.range(0, arr.length)
.filter(i -> arr[i] != null)
.findFirst()
.orElse(-1 /* Or some other default */);

3 dla odpowiedzi № 2

Jeśli używasz Java 9 istnieje metoda zwana takeWhile(). możesz go użyć w swojej tablicy liczb.

long index = Arrays.stream(yourArray).takeWhile(Objects::isNull).count();

Edytować

W przypadku braku elementów o wartości innej niż zero indeks będzie równy długości tablicy.

Możesz to sprawdzić.

if(index == array.length) {
index = -1;
}

1 dla odpowiedzi nr 3

Na przykład podobnie jak w wersji Java wcześniejszej niż 8:

static final Object ANY_NOT_NULL = new Object()
{
@Override
public boolean equals(final Object obj)
{
return obj != null;
}
};

public static int firstIndexOfNotNull(Object... values)
{
return Arrays.asList(values).indexOf(ANY_NOT_NULL);
}