import java.util.ArrayList; import java.util.Collections; import java.util.List; final class Flattener { List flatten(final List nestedList) { if (nestedList.isEmpty()) { return new ArrayList<>(); } else { final List result = new ArrayList(); final Object head = nestedList.get(0); final List tail = nestedList.subList(1, nestedList.size()); if (head instanceof List) { result.addAll(flatten((List) head)); } else { result.add(head); } result.addAll(flatten(tail)); result.removeAll(Collections.singleton(null)); return result; } } }