Sum values



  • Hallo,

    also ich hab eine ArrayListe und die sortier ich 2 mal.

    liste.sort(Comparator.comparing(MyClass::getB_or_S).thenComparing(Myclass::getName));
    

    zuerst sortier ich nach B(Buy) und S(Sell) . alle B stehen dann oben und alle S unten . Danach sortier ich noch nach den Namen . Herr Huber kann sowohl bei Buy als auch Sell auftauchen. Jedenfall soll z.B. alle Buys von Herrn Huber noch aufsummiert werden und dann statt z.B. 4 Eintraegen von Herr Huber nur noch 1 dort stehen. Dazu soll das Feld double value summiert werden. Wie macht man das ?



  • Stichwort: gruppieren

    Unter ArrayList Gruppieren, "Doppelte Werte" Addieren gibt es ein ähnliches Problem mit einer Lösung.



  • naja ok. Man bekommt jetzt eine map geliefert.
    So jetzt wuerde ich die map gerne sortieren und dann noch nach der Groesse ordnen. Mit der map geht das wohl nicht.

    Jetzt bin ich wohl gezwungen das von der map zurueck in eine Liste zu transportieren oder. Maps lassen sich nicht sortieren 😞

    Map<String, Double> map = lstInstructions.stream().collect(
    		  Collectors.groupingBy(Instruction::getId,Collectors.summingDouble(Instruction::getAmountOfTradeUSD)));
    


  • Bianca schrieb:

    Maps lassen sich nicht sortieren 😞

    Es gibt Maps die nach Key sortiert sind (z.B. TreeMap) oder die Einfügereihenfolge behalten (z.B. LinkedHashMap). Und du kannst beim collect und groupingBy auch bestimmen was für eine Map erzeugt werden soll.