Любая нулевая безопасная альтернатива ArrayList.addAll?

Я рефакторинг старого кода, который я написал, и я наткнулся на этот код:

    List<OcmImageData> fullImagePool = new ArrayList<>();
    if (CollectionUtils.isNotEmpty(style.getTestMH())) {
        fullImagePool.addAll(style.getTestMH());
    }
    if (CollectionUtils.isNotEmpty(style.getTrousers())) {
        fullImagePool.addAll(style.getTrousers());
    }
    if (CollectionUtils.isNotEmpty(style.getDetailRevers())) {
        fullImagePool.addAll(style.getDetailRevers());
    }
    if (CollectionUtils.isNotEmpty(style.getDetailCuffs())) {
        fullImagePool.addAll(style.getDetailCuffs());
    }
    if (CollectionUtils.isNotEmpty(style.getDetailInner())) {
        fullImagePool.addAll(style.getDetailInner());
    }
    if (CollectionUtils.isNotEmpty(style.getDetailMaterial())) {
        fullImagePool.addAll(style.getDetailMaterial());
    }
    if (CollectionUtils.isNotEmpty(style.getComposing())) {
        fullImagePool.addAll(style.getComposing());
    }
    ...

Итак, в основном мне нужно создать ArrayList, который содержит все перечисленные здесь списки, потому что они могут быть нулевыми (они извлекаются из базы данных из закрытой исходной структуры и, к сожалению, ее нулевой, если он ничего не находит) Мне нужно проверять каждый раз, если коллекция не равна null, чтобы добавить их в этот пул, который выглядит просто странно.

Есть ли библиотека или класс утилиты Collection-Framework, которая дает мне возможность добавить коллекцию в другую, не выполняя нуль-безопасную проверку?

Ответы

Ответ 1

Просто напишите небольшой полезный метод:

public static <E> void addAllIfNotNull(List<E> list, Collection<? extends E> c) {
    if (c != null) {
        list.addAll(c);
    }
}

чтобы вы могли написать:

List<OcmImageData> fullImagePool = new ArrayList<>();
addAllIfNotNull(fullImagePool, style.getTestMH());
addAllIfNotNull(fullImagePool, style.getTrousers());
addAllIfNotNull(fullImagePool, style.getDetailRevers());
// ...etc

Ответ 2

В Java 8 Используйте код ниже: -

Optional.ofNullable(listToBeAdded).ifPresent(listToBeAddedTo::addAll)

listToBeAdded - список, элементы которого должны быть добавлены. listToBeAddedTo - список, в который вы добавляете элементы с помощью addAll.

Ответ 3

Использование Java 8:

List<OcmImageData> fullImagePool = Stream.of(style.getTestMH(), /* etc */)
                                         .filter(Objects::nonNull)
                                         .flatMap(l -> l.stream())
                                         .collect(Collectors.toList());

Ответ 4

Это реорганизует чисто

for (OcmImageData elem : new List<OcmImageData>[] { style.getTestMH(), style.getTrousers() /* etc */}) {
    if (CollectionUtils.isNotEmpty(elem)) {
        fullImagePull.addAll(elem);
    }
}

Чтобы ответить на ваш первоначальный вопрос, нет, вам придется выполнить свою нулевую проверку. Вы можете видеть методы Guava будут бросать NPE, а методы Apache явно требуют ввод не должен быть нулевым.