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 № 1Jedną 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);
}