Qui sto utilizzando il flusso Javaparallel per scorrere un'Elenco e chiamare una chiamata REST con ciascun elemento di elenco come input. Devo aggiungere tutti i risultati della chiamata REST a una raccolta per la quale sto utilizzando uno ArrayList
. Il codice riportato di seguito funziona bene, tranne per il fatto che la sicurezza non-thread di ArrayList causerebbe risultati errati e l'aggiunta della sincronizzazione necessaria causerebbe conflitti, minando il vantaggio del parallelismo.Java 8 parallelStream per concomitante chiamata Database/REST
Qualcuno può suggerirmi un modo corretto di utilizzare il flusso parallelo per il mio caso.
public void myMethod() {
List<List<String>> partitions = getInputData();
final List<String> allResult = new ArrayList<String>();
partitions.parallelStream().forEach(serverList -> callRestAPI(serverList, allResult);
}
private void callRestAPI(List<String> serverList, List<String> allResult) {
List<String> result = //Do a REST call.
allResult.addAll(result);
}
Penso in particolare che l'aspetto * functional * di questo sia istruttivo –
Non dovrebbe l'ultima riga essere '.collect (Collectors.toList());' – Zeeshan
Ho assunto un 'import java.util.stream.Collectors.toList statico ; '... – assylias