Transmitir reducir vs Stream.parallel.reduce ()

e2rabi:

Estoy tratando de entender por qué el resultado de este ejemplo es siempre cierto que aquí está mi ejemplo:

 String s1 = Arrays.asList("A", "E", "I", "O", "U").stream()
                .reduce("", String::concat);
 String s2 = Arrays.asList("A", "E", "I", "O", "U").parallelStream()
                .reduce("", String::concat);

System.out.println(s1.equals(s2));

Esto siempre se imprime true, lo que sé es con el parallelStream no podemos predecir los resultados puede alguien explicar por qué?

Samuel Philipp:

Si se echa un vistazo a los documentos de Stream.reduce()que se encuentra esta:

Realiza una reducción en los elementos de esta corriente [...] y devuelve el valor reducida. Esto es equivalente a:

 T result = identity;
 for (T element : this stream)
     result = accumulator.apply(result, element)
 return result;

pero no está limitado a ejecutar secuencialmente.

Así Stream.reduce()se asegura que los valores se procesan en orden.

Si intenta usar Stream.forEach()e imprimir cada valor de la siguiente manera:

Arrays.asList("A", "E", "I", "O", "U").stream()
        .forEach(System.out::print);
System.out.println();
Arrays.asList("A", "E", "I", "O", "U").parallelStream()
        .forEach(System.out::print);

Obtendrá este resultado (o algo similar en la segunda línea):

AEIOU
IUOEA

( Stream.forEachOrdered()Con el ejemplo anterior también se imprimirá los valores en orden)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=312036&siteId=1
Recomendado
Clasificación