Quiero generar 4 números aleatorios, del 1 al 6 inclusive. Luego quiero obtener la suma de estos elementos excluyendo el valor más pequeño.
Actualmente estoy creando una secuencia para completar una lista:
List<Integer> values = r.ints(4,1,7).boxed().collect(Collectors.toList())Luego elimino el valor más pequeño y uso otra secuencia para obtener la suma de los valores:
values.stream().mapToInt(Integer::intValue).sum();¿Alguien puede sugerir una forma de realizar todas estas operaciones en una sola secuencia?
Ordene la secuencia, luego omita el primer elemento (es decir, el más pequeño):
int sumExceptSmallest = IntStream.of(4,1,7).sorted().skip(1).sum(); // 11o en su caso específico:
int sumExceptSmallest = r.ints(4,1,7).sorted().skip(1).sum();Tenga en cuenta que si bien esto puede ser lo mejor y lo más eficiente para el codificador , no es la solución más eficiente posible porque la clasificación tiene una complejidad de tiempo de O (n log n). El tiempo de ejecución más eficiente sería un solo paso para encontrar el más pequeño y calcular la suma, luego restar uno del otro, dando la solución en O(n) tiempo.
El uso de IntSummaryStatistics puede calcular esto en su transmisión con un solo paso:
IntStream stream = /* random stream of integers */; IntSummaryStatistics stats = stream.summaryStatistics(); int sum = stats.sum(); sum -= stats.min(); //sum, minus the lowest element