Не получается избавиться от исключения ArrayIndexOutOfBoundsException

Вопрос следующий: у меня есть активы и серийные номера к ним. Когда количество серийных номеров больше или равно количеству активов, программа работает корректно. Ниже пример кода, где я прохожу по каждому активу в цикле и присваиваю ему серийный номер. У 1 актива должен быть только 1 серийный номер:

String[] arrayOfStringsSerialNumbers = contractPosition.getSerialNumbers().split("\n");
for (int i = 0; i < (contractPosition.getByElement() ? contractPosition.getQtyRemain() : 1); i++) {
  Asset asset = metadata.create(Asset.class);
  asset = templateService.getEntityWithAppliedTemplate(asset);
  asset.setSerialNo(arrayOfStringsSerialNumbers[i]);
}

Проблема возникает тогда, когда количество серийных номеров вводится меньше, чем активов. Тогда и выбрасывается ArrayIndexOutOfBoundsException. Я пока дошел до такого примитивного решения, но оно меня не устраивает:

if (arrayOfStringsSerialNumbers.length < contractPosition.getQtyRemain()) {
    asset.setSerialNo("");
} else {
    asset.setSerialNo(arrayOfStringsSerialNumbers[i]);
}

При таком решении, если количество серийных номеров меньше, чем количество активов, то для каждого актива в поле "Серийный номер" будет пустая запись. Мне же нужна следующая логика: если активов 3, а серийных номеров, например, 1, то для первого актива серийный номер запишется, а для двух других нет - у них будет пустая запись в этом поле. Как мне это сделать?


Ответы (1 шт):

Автор решения: Nowhere Man

Как вариант, с запоминанием количества активов в отдельной переменной, и использованием тернарного оператора.

String[] serialNumbers = contractPosition.getSerialNumbers().split("\n");
int assetCount = contractPosition.getByElement() ? contractPosition.getQtyRemain() : 1;
for (int i = 0; i < assetCount; i++) {
  Asset asset = metadata.create(Asset.class);
  asset = templateService.getEntityWithAppliedTemplate(asset);
  asset.setSerialNo(i < serialNumbers.length ? serialNumbers[i] : "");
}
→ Ссылка