Java 8: cómo sumar todos los elementos de la lista en un mapa de listas

horus

Tengo un mapa de listas de un objeto en particular y quiero agregar todos los elementos de las listas en función de una variable de instancia particular.

Mi Objeto:

class Risk{ 
    Integer id, riskValue, totRisk=0;
    String name;

    Integer getId(){
       return id;
    }
    Risk(Object[] result){
         id=(Integer)result[0];
         riskValue=(Integer)result[1];
         name=(String)result[3];
    }
}

Obtengo de la base de datos una lista de matrices de tipo objeto:

List< Object[] > results=getResults();

Utilizo Java 8 para agrupar mis datos por ID, porque quiero SUMAR por riskValuetodos los objetos de tipo que Risktienen el mismo id.

Esto es lo que hago:

List<Risk> risks=results.stream().map(Risk::new).collect(Collectors.toList());
Map<Integer, List<Risk>> byId=risks.stream.collect(Collectors.groupingBy(Risk::getId));

En este punto, tengo todos mis objetos de riesgo agrupados por ID. Y quiero que cada lista sume todos los objetos riskValuey tenga el total en la variabletotRisk

¿Cómo calcular en la variable totRiskel total de las variables riskValueen cada Lista?

Note1: Quiero hacerlo usando Java 8, sé cómo hacerlo usando Java 7 y más abajo.

Nota 2: Quizás también sea posible hacerlo de una vez, al no tener que agrupar primero por ID. Lo que quiero lograr es sumar todos los objetos con el mismo ID en el original List<Object[]> results. Si se puede hacer con una sola declaración, es aún mejor.

Holger

Debe tener en cuenta que puede combinar Collectors. VerCollectors.groupingBy(Function,Collector)

Map<Integer, Integer> byId=risks.stream.collect(
    Collectors.groupingBy(Risk::getId, Collectors.summingInt(Risk::getRiskValue)));

También puedes combinarlo con la primera operación:

Map<Integer, Integer> byId=results.stream().map(Risk::new).collect(
    Collectors.groupingBy(Risk::getId, Collectors.summingInt(Risk::getRiskValue)));

Tenga en cuenta que supongo que tiene un método getRiskValue()en su clase Risk; de lo contrario, debe reemplazarlo Risk::getRiskValuecon una expresión lambda r -> r.riskValuepara acceder al campo; sin embargo, siempre se recomienda tener métodos getter.

El resultado se asigna de id a total.


Después de leer su pregunta nuevamente, noté que realmente desea resumir riskValuey almacenar dentro totRiskde cadaRisk instancia (?) . Esto es un poco más complicado ya que no se ajusta al patrón de uso común:

Map<Integer, List<Risk>> byId=results.stream().map(Risk::new).collect(
  Collectors.groupingBy(Risk::getId, Collectors.collectingAndThen(
    Collectors.toList(), l-> {
      int total=l.stream().collect(Collectors.summingInt(r -> r.riskValue));
      l.forEach(r->r.totRisk=total);
      return l;
    })));

en este punto realmente deberíamos cambiar a usar import static java.util.stream.Collectors.*;:

Map<Integer, List<Risk>> byId=results.stream().map(Risk::new).collect(
  groupingBy(Risk::getId, collectingAndThen(toList(), l-> {
    int total=l.stream().collect(summingInt(r -> r.riskValue));
    l.forEach(r->r.totRisk=total);
    return l;
  })));

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

¿Cómo encontrar si todos los elementos de la lista están en un conjunto en Java 8?

Usando mapa para sumar los elementos de la lista

Sumar elementos en la lista de listas en Python

Cómo combinar todos los elementos de la lista en un marco de datos en R

Cómo sumar todos los elementos en el objeto de la matriz

¿Cómo agregar cadenas a todos los elementos de la lista en un ul usando javascript?

¿Cómo sumar todos los elementos en una columna de una lista 2d dentro de un diccionario? Python 3

Cómo actualizar un objeto todos los elementos dentro de la función de mapa en reaccionar

Cómo actualizar un objeto todos los elementos dentro de la función de mapa en reaccionar

¿Cómo nombrar sucintamente todos los elementos de varias listas de la misma manera cuando las listas están anidadas en una lista R?

Cómo recoger en un mapa la formación de una lista de valores cuando las llaves duplicadas en los arroyos, en Java 8

¿Cómo combinar linealmente una lista de listas en Python, donde no todos los elementos son una lista?

¿Cómo emparejo los elementos de la primera lista con todos los elementos de una segunda lista en SML?

¿Cómo puedo establecer una declaración if cuando todos los elementos de una lista de listas equivalen a un valor?

¿Cómo encontrar el menor número de listas para cubrir todos los elementos de la otra lista con Python?

¿Cómo propagar el valor de la propiedad del primer elemento de la lista a todos los elementos de la lista usando java 8 y streams?

¿Cómo ordenar elementos dentro de una lista de listas sin alterar la posición de los elementos en Python?

LINQ / C # Elimina todos los elementos de una lista que se encuentran en varias otras listas

Copiar todos los elementos de un mapa en otro

¿Cómo eliminar todos los elementos de la lista?

Sumar elementos de la lista en javascript

Java 8 obtiene todos los elementos en la lista

Python: cómo sumar todos los valores con un nombre diferente del dict en la lista

¿Cómo eliminaría partes de todos los elementos de la lista en Python?

Java: Forma correcta de crear una lista que contiene todos los no-en-se cruzan elementos de dos listas diferentes en función de un atributo específico?

¿Cómo hacer una lista de enteros que sea la suma de todos los enteros de un conjunto de listas en un dictado?

¿Cómo desplazar todos los elementos de una matriz a la derecha (en 1) usando el mapa de métodos?

En Python, dado un diccionario con listas en los valores, ¿cómo clasifico el diccionario en función de la cantidad de elementos en esa lista?

Flujos de Java 8: ¿cómo extraer todos los objetos dentro de un mapa de mapas a un nuevo mapa?

TOP Lista

  1. 1

    ¿Cómo ocultar la aplicación web de los robots de búsqueda? (ASP.NET)

  2. 2

    Pagination class not getting applied in html

  3. 3

    Pandas의 CSV 파일을 Pandas 데이터 프레임으로 가져 오기

  4. 4

    Opción de máquina virtual no reconocida 'MaxPermSize = 512m' cuando se ejecuta Zeppelin

  5. 5

    OpenQA.Selenium.NoSuchElementException-C # 셀레늄

  6. 6

    OAuth 2.0 utilizando Spring Security + WSO2 Identity Server

  7. 7

    ¿Cómo pintar el Dropline de un RowHeader-JTable en el Main-JTable durante un DragAndDrop?

  8. 8

    Joindre avec des valeurs séparées par des virgules dans SQL Server Compact ne fonctionne pas

  9. 9

    Recherche de la position d'index d'une valeur dans r dataframe

  10. 10

    GPU를 사용하여 ffmpeg 필터의 처리 속도를 가속화하는 방법은 무엇입니까?

  11. 11

    caída condicional de filas desde un marco de datos de pandas

  12. 12

    python: ¿por qué dice variable indefinida cuando llamo función?

  13. 13

    Error: la ejecución falló para la tarea ': app: compileDebugJavaWithJavac'. java.io.FileNotFoundException:

  14. 14

    ¿Cómo especificar el puerto en el que se aloja una aplicación ASP.NET Core?

  15. 15

    Que signifie Decimal (-1)?

  16. 16

    Link library in Visual Studio, why two different ways?

  17. 17

    ¿Cómo determinar la menor cantidad de incrementos de Y necesarios para trazar un múltiplo de 5 en una gráfica?

  18. 18

    nested observables executed one after the other after termination

  19. 19

    uitableview delete button image in iOS

  20. 20

    C # cómo eliminar la última línea de un bucle

  21. 21

    R - ggplot2 - use raster as greyscale basemap

CalienteEtiquetas

Archivo