Как преобразовать цикл for в цикл потока - PullRequest
0 голосов
/ 30 октября 2018

Как преобразовать этот код в цикл потока:

for(long l = 1L; l <= 250000; l++) {
     v = value.add(BigInteger.valueOf(myMethod.getInt()));
}

Мне нужно получить 'v' как уникальное значение BigInteger.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

По сути, похоже, что ваш myMethod.getInt метод является генератором. Поэтому, на мой взгляд, лучший способ сделать это - создать бесконечный поток из вашего генератора .

IntStream.generate(myMethod::getInt)
    .mapToObj(BigInteger::valueOf)
    .limit(25000)
    .reduce(BigInteger.ZERO, BigInteger::add)

Это более понятно, потому что вам не нужно указывать диапазон - диапазон - это не то, что вам нужно, а количество элементов (то есть размер диапазона). Вам также не нужно игнорировать параметр при отображении.

0 голосов
/ 30 октября 2018
BigInteger result = IntStream.range(0, 25000)
  .map(i -> myMethod.getInt())
  .mapToObj(BigInteger::valueOf)
  .reduce(BigInteger.valueOf(0), BigInteger::add)

Другой ответ с IntStream.generate(myMethod::getInt) и limit более элегантен:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...