Я пытался вставить строки в StringBuffer, используя метод foreach для parallelStream(), созданный из коллекции Set. Проблема в том, что каждый раз, когда я выполняю код, конечная строка (StringBuffer.toString()) имеет на 1 элемент меньше общего (случайный элемент каждый раз, когда я пытаюсь).
Я также меняю StringBuffer на StringBuilder, parallelStream() на stream(), но всегда на 1 элемент меньше.
Я использую: - Версия Java: java 1.8_121 - Сервер: Weblogic 12.2.1.2 (я не думаю, что это имеет отношение к проблеме) - Spring boot 2.0.2.RELEASE (я не думаю, что это имеет отношение к проблема)
ПРИМЕЧАНИЕ. Я использовал карту, чтобы сохранить PDF-файлы, которые я должен подписать позже в процессе (в другом HTTP-запросе).
Map<String, ClientPdf> dataToEncript = new HashMap<>(); // pdf name it will be the key for this map (it is unique in the sql query)
List<Client> listClients = // list of clients from database
Set<ClientPdf> clientsPdf = new HashSet<>();
for (Client client : listClients) {
clientsPdf.add(client.clientPdf()); // clientPdf() generate a new object ClientPdf, which is similar to Client class, but with less fields (essential for the Set)
}
log.debug("Generating documents");
clientsPdf.parallelStream().forEach(pdf -> {
// some code to generate pdf
log.debug("Inserting pdf: {}", pdf); // this log print, for example, 27.000 lines
dataToEncript.put(pdf.getPdfName(), pdf);
});
StringBuffer sb = new StringBuffer(); // StringBuffer or StringBuilder, the same problem
for (ClientPdf clientPdf : dataToEncript.values()) {
sb.append(clientPdf.getPdfName() + ";" + clientPdf.getRut() + "\n"); // appending all values of de map dataToEncript, it will append 26.669 (1 less)
}