Есть несколько соображений в зависимости от того, был ли оригинал коллекцией.
Если у вас был массив данных Data [],
String[] dataCopy = new String[data.length];
int i = 0;
for (Data datum: data){
if (datum==null)break;
dataCopy[i++] = datum;
}
Но это не оптимально, потому что вы бы присвоили больше ячеек массива, чем необходимо, если бы в исходных данных было 100 ячеек, а в 50-й ячейке была найдена пустая строка.
Использование ArrayList позволило бы JVM управлять расширением ячеек, так что в конце вы просто конвертируете ArrayList в массив с помощью toArray (). На самом деле это не преобразование, но toArray удаляет внутренне управляемый массив из ArrayList.
ArrayList<String> dataList = new ArrayList<String>(data.length);
for (Data datum: data){
if (datum==null)break;
dataList.add(datum);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);
Или, если обрабатываемый массив является элементом данных:
ArrayList<String> dataList = new ArrayList<String>(data.length);
for (Data datum: data.getItems()){
String name = datum.getName();
if (name==null)break;
dataList.add(name);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);
Или, если исходная структура данных реализует Iterable. Допустим, класс предметов - Item.
Iterator<Item> itemit = data.getItems().iterator();
ArrayList<String> dataList = new ArrayList<String>(data.length);
while(itemit.hasNext()){
String name = itemit.next().getName;
if (name==null)break;
dataList.add(name);
}
String[] dataCopy = {};
dataCopy = datalist.toArray(dataCopy);