Java - Porque este resultado de la terminal operacion del Stream?

 
Vista:
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque este resultado de la terminal operacion del Stream?

Publicado por Renzo (10 intervenciones) el 03/07/2018 16:08:26
Buenos Días con todos
He estado programando usando Stream, y tengo problemas al entender como funciona este codigo

max

Simplemente hago de un ArrayList un Stream, y con el metodo terminal "max(Integer.max(a,b))", deberia retornarme el mayor de los elementos del Stream, sin embargo la salida es 3, cosa que no veo el porque


Modifique el código para ver como actúa el stream con cada elemento:

maxDetallado

Aqui esta la salida


resultadoMax

Como ven, en cada operacion del Stream compara 3 con el siguiente valor del Stream, pero el 3 se mantiene y se compara con todos los elementos, yo pensaba que al comparar con max, el mayor se guardaba y el menor se descartaba, pero aqui el primer elemento 3 compara con todos, y al final ese mismo es devuelto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Porque este resultado de la terminal operacion del Stream?

Publicado por Tom (1523 intervenciones) el 03/07/2018 21:38:59
Porque no estás pasando a max() un Comparator.
El compilador "traga" por temas relacionados con:
https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html
en los lambdas (y los Functional Interfaces)

Pásale un argumento que se resuelva sin ambigüedad (por ejemplo max(Integer::compare)) y debería funcionar (o, mejor, pásale directamente un Comparator como en max(Comparator.comparing(Integer::valueOf)).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque este resultado de la terminal operacion del Stream?

Publicado por Renzo (10 intervenciones) el 07/07/2018 20:25:51
Groso man, Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 18
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Porque este resultado de la terminal operacion del Stream?

Publicado por Renzo (10 intervenciones) el 22/07/2018 05:57:05
Una duda,
ls.stream().max(Integer::max).get()

aqui "(Integer::max)" no estaria siendo usado como Comparator? y no deberia comparar el primer par de elementos del Stream y el mayor con el siguiente elemento hasta acabar el Stream?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar