我试着像那样绕圈

// ArrayList tourists

for (Tourist t : tourists) {
    if (t != null) {     
        t.setId(idForm); 
    }   
}

但这并不好。谁能给我一个更好的解决办法?


一些有用的基准可以帮助你做出更好的决定:

While循环,For循环和迭代器性能测试


当前回答

Objects类有一个非空谓词,可以与过滤器一起使用。

例如:

tourists.stream().filter(Objects::nonNull).collect(Collectors.toList());

其他回答

我摆弄了一下,发现trimToSize()似乎可以工作。我是在Android平台上工作,所以可能会有所不同。

效率不高,但时间短

while(tourists.remove(null));
List<String> colors = new ArrayList<>(
Arrays.asList("RED", null, "BLUE", null, "GREEN"));
// using removeIf() + Objects.isNull()
colors.removeIf(Objects::isNull);

Objects类有一个非空谓词,可以与过滤器一起使用。

例如:

tourists.stream().filter(Objects::nonNull).collect(Collectors.toList());

我使用了流接口、流操作collect和一个helper方法来生成一个新列表。

tourists.stream().filter(this::isNotNull).collect(Collectors.toList());

private <T> boolean isNotNull(final T item) {
    return  item != null;
}