Я понимаю, что вся математика выполняется как самый большой тип данных, необходимый для обработки текущих значений, но когда вы пересекаете цикл, как вы явно умножаете long? Следующий код возвращает 0, я подозреваю, из-за переполнения.
long result = 0L;
List<Long> temp = (List<Long>) getListOfIntegers();
for (int i = 0; i < temp.size(); i++) {
result *= temp.get(i).longValue();
}
System.out.println(result);