如何获取第一个非空数组元素的索引?

问题描述 投票:0回答:5

有什么好方法来获取第一个非空字符串数组元素的索引吗?是的,你可以写

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

但也许有可能以更漂亮的方式做到这一点?例如,你可以使用

ObjectUtils.firstNonNull
方法来获取数组的第一个非空元素,也许有类似获取索引的东西?

java arrays
5个回答
8
投票

一个技巧是创建索引流,然后找到第一个指向非空值的索引:

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

3
投票

如果您使用

Java 9
,有一种称为
takeWhile()
的方法。您可以像这样在数字数组中使用它。

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

编辑

如果没有非空元素,索引将等于数组的长度。

您可以检查一下。

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

1
投票

例如Java 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);
}

0
投票

Object[] dizi = { 1, 2, 3, 4, 5, 6, null, 8, 9, 10 };

    Object t = null;
    int len = dizi.length;
    System.out.println(IntStream.range(0, len).filter(i -> t == dizi[i]).findFirst().orElse(-1)); // can't find.);

0
投票
int last = list.size() - 1;
for (; last >= 0 && list.get(last) == null; last--) { /* no-op */ }
© www.soinside.com 2019 - 2024. All rights reserved.