Параллельная обработка Java с возвращаемым значением - PullRequest
0 голосов
/ 01 октября 2019
List<String> lines = FileUtils.readLines(dataFile,"UTF-8");
lines.parallelStream().forEachOrdered(line->processRecord(line, dataFileName)); 

здесь запись процесса вернет строковое значение, как сохранить в любой коллекции / файле

может помочь мне в этом. спасибо за продвижение.

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

[Ответ основан на комментариях]

Предположим, вы хотите обработать список String, а также хотите сохранить ответ каждой обработки с вводом и выводом, тогда вы можете следовать приведенному ниже подходу.

 List<String> lines = FileUtils.readLines(dataFile,"UTF-8");
 Map<String, String> result = lines.parallelStream()
       .collect(Collectors.toMap(line -> line, line -> processRecord(line, dataFileName)));

Здесь result (простое Map<Key, Value>) будет содержать как .. ключ в качестве каждой отдельной строки, так и значение в качестве каждого отдельного ответа строки THAT возвращается методом processRecord.

сколько потоков будет параллельно выполнять этот метод (из комментариев)

Метод parallelStream() использует форму потоков DefaultForkJoinPool. И этот пул имеет размер по умолчанию, равный number of cores в вашей системе.

0 голосов
/ 01 октября 2019

Вместо использования forEachOrdered вы можете использовать карту для выполнения и сохранения результата для каждого из входных данных. Затем вы можете собрать их в новый список для хранения результатов.

Пример:

        List<String> result = lines.parallelStream()
            .map(line->line.toUpperCase())
            .collect(Collectors.toCollection(ArrayList::new));
...