У меня есть параллельный поток, потому что задача очень медленная, я вставлю код ниже.Ситуация такова.
У меня есть arrayList, мне нужно что-то сделать с каждым объектом в этом списке (это медленно) и добавить объект во временный список, процесс в потоке заканчивается нормально, ядумаю, потому что я вижу каждый объект, обработанный с помощью журналов.
Когда поток заканчивается, иногда временный список имеет n-1 объектов или один как ноль.
Есть идеи?
В этом примере кода ошибок не происходит, но логика та же, но без бизнес-логики.
public class SampleCode {
public List<SomeObject> example(List<SomeObject> someObjectList) {
List<SomeObject> someObjectListTemp = new ArrayList<>();
someObjectList.parallelStream().forEach(someObject -> {
List<ExtraData> extraDataList = getExtraData(someObject.getId());
if (extraDataList.isEmpty()) {
someObjectListTemp.add(someObject);
} else {
for (ExtraData extraData : extraDataList) {
SomeObject someObjectTemp = null;
someObjectTemp = (SomeObject) cloneObject(someObject);
if (extraData != null) {
someObjectTemp.setDate(extraData.getDate());
someObjectTemp.setData2(extraData.getData2());
}
if (someObjectTemp == null) {
System.out.println("Warning null object"); //I NEVER see this
}
someObjectListTemp.add(someObjectTemp);
System.out.println("Added object to list"); //I Always see this the same times as elements in original list
}
}
});
if (someObjectListTemp.size() < 3) {
System.out.println("Error: There should be at least 3 elements"); //Some times one object is missing in the list
}
for (SomeObject someObject : someObjectListTemp) {
if (someObject == null) {
System.out.println("Error: null element in list"); //Some times one object is null in the list
}
}
return someObjectListTemp;
}