Wie Gruppe, Zählung und die Summe aus der Liste des Objekts in einzelnem Strom und Speicher in einer anderen Liste von Objekt auszuführen?

user1127643:

Ich versuche, die Gruppe durch, Graf und die Summe aus der Liste des Objekts mit Java-Stream und Sammlung zu erhalten. Ich bin nicht sicher, wie ich das gewünschte Ergebnis zu erzielen.

InputModel

String month;
BigDecimal salary;
String department;
String noOfEmp;

InputModel [(Mai, 100, IT, 10), (Juni 300, IT, 7), (Juli 300, IT, 7), (Mai, 1000, HR, 5), (Juni 300, HR, 7 ), (Juli 600, HR, 5)]

OutputModel

String month
BigDecimal salary
String noOfEmp

Erwartete Ausgabe OutputModel [(Mai 1100,15), (Juni 600,14), (Juli 900,12)]

Ich habe versucht, Code unten, aber es zurück Gruppe und Count.

Map<String, Integer> result= inputModels.parallelStream().collect(Collectors.groupingBy(InputModel::getMonth,
            LinkedHashMap::new, Collectors.summingInt(InputModel::getNoOfEmp)));

Danke im Voraus!!!

Ravindra Ranwala:

Vorausgesetzt , dass Sie haben OutputModelKlasse an Ort und Stelle, wird dies Ihr Problem lösen.

Collection<OutputModel> outputModels = inputModel.stream()
    .map(im -> new OutputModel(im.getMonth(), im.getSalary(), im.getNoOfEmp()))
    .collect(Collectors.toMap(OutputModel::getMonth, Function.identity(),
        (m1, m2) -> new OutputModel(m1.getMonth(), m1.getSalary().add(m2.getSalary()),
            String.valueOf(Integer.valueOf(m1.getNoOfEmp()) + Integer.valueOf(m2.getNoOfEmp()))),
        LinkedHashMap::new))
    .values();

Ein Wort der Warnung: Besser nicht Strings zu verwenden , wo andere Arten mehr geeignet sind. Für eine Instanz haben Sie Folgendes verwendet intdarzustellen , noOfEmpanstatt ein String. Das würde den Code vereinfachen und gleichzeitig die Möglichkeit , Laufzeitfehler aufgrund unechter Daten zu reduzieren. Außerdem prüfen , mit java.time.MonthEnum Monat des Jahres entgegen Literale mit String darzustellen.

Hier ist die Ausgabe,

[{Month = Mai Gehalt = 1100, noOfEmp = 15}, {Monat = Juni Gehalt = 600, noOfEmp = 14}, {Monat = Juli Gehalt = 900, noOfEmp = 12}]

Ich denke du magst

Origin http://43.154.161.224:23101/article/api/json?id=178107&siteId=1
Empfohlen
Rangfolge