java - Null check in an enhanced for loop

ID : 20105

viewed : 25

Tags : javasyntaxloopsfor-loopjava

Top 5 Answer for java - Null check in an enhanced for loop

vote vote

92

You should better verify where you get that list from.

An empty list is all you need, because an empty list won't fail.

If you get this list from somewhere else and don't know if it is ok or not you could create a utility method and use it like this:

for( Object o : safe( list ) ) {    // do whatever   } 

And of course safe would be:

public static List safe( List other ) {     return other == null ? Collections.EMPTY_LIST : other; } 
vote vote

82

You could potentially write a helper method which returned an empty sequence if you passed in null:

public static <T> Iterable<T> emptyIfNull(Iterable<T> iterable) {     return iterable == null ? Collections.<T>emptyList() : iterable; } 

Then use:

for (Object object : emptyIfNull(someList)) { } 

I don't think I'd actually do that though - I'd usually use your second form. In particular, the "or throw ex" is important - if it really shouldn't be null, you should definitely throw an exception. You know that something has gone wrong, but you don't know the extent of the damage. Abort early.

vote vote

74

It's already 2017, and you can now use Apache Commons Collections4

The usage:

for(Object obj : ListUtils.emptyIfNull(list1)){     // Do your stuff } 

You can do the same null-safe check to other Collection classes with CollectionUtils.emptyIfNull.

vote vote

62

With Java 8 Optional:

for (Object object : Optional.ofNullable(someList).orElse(Collections.emptyList())) {     // do whatever } 
vote vote

53

Use ArrayUtils.nullToEmpty from the commons-lang library for Arrays

for( Object o : ArrayUtils.nullToEmpty(list) ) {    // do whatever  } 

This functionality exists in the commons-lang library, which is included in most Java projects.

// ArrayUtils.nullToEmpty source code  public static Object[] nullToEmpty(final Object[] array) {     if (isEmpty(array)) {         return EMPTY_OBJECT_ARRAY;     }     return array; }  // ArrayUtils.isEmpty source code public static boolean isEmpty(final Object[] array) {     return array == null || array.length == 0; } 

This is the same as the answer given by @OscarRyz, but for the sake of the DRY mantra, I believe it is worth noting. See the commons-lang project page. Here is the nullToEmpty API documentation and source

Maven entry to include commons-lang in your project if it is not already.

<dependency>     <groupId>org.apache.commons</groupId>     <artifactId>commons-lang3</artifactId>     <version>3.4</version> </dependency> 

Unfortunately, commons-lang doesn't provide this functionality for List types. In this case you would have to use a helper method as previously mentioned.

public static <E> List<E> nullToEmpty(List<E> list) {     if(list == null || list.isEmpty())     {         return Collections.emptyList();     }     return list; } 

Top 3 video Explaining java - Null check in an enhanced for loop

Related QUESTION?