Ich habe eine Reihe von Daten wie folgt aus:Parallele Berechnung auf einem Datensatz in Java 8?
Set<CustomObject> testSet = [{id: a1, qty: 3},
{id: a2, qty: 9},
{id: a3, qty: 5},
{id: a4, qty: 8},
{id: a5, qty: 12},
...
{id: a200, qty: 7}];
Die IDs in 3 Gruppen eingeteilt sind, die mit der Methode gefunden werden kann:
oben//The getGroup method is implemented in the class CustomObject.
//I am using hazelcast map to store few id's that are inclusive, and
//one of the id that is in the request of the api is the current id.
public String getGroup(String id){
HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance();
if(id.equals(this.id)){
return "currentId";
}else if(id.equals(hazelcastInstance.getMap("idMap").get(id))){
return "inclusive";
} else {
return "exclusive";
}
}
Die testSet mit großen Datenmengen, und ich möchte die Summe der Mengen jedes Objekts im Set basierend auf der obigen Gruppierungsmethode unter Verwendung von Java ausführen.
Ich versuchte mit Streams, aber das erlaubt mir nicht, die Methode getGroup in der Methode Gruppierung von Java 8 Streams zu verwenden.
Bitte führen Sie mich an, wie Sie effizient die Qty-Werte basierend auf Gruppen mit paralleler Verarbeitung summieren.
Wie verwenden Sie Gruppierung nach Methode wahrscheinlich funktioniert es nicht wegen ID-Parameter –
Ja @Bolzano, ich kann das hier nicht verwenden, ich habe versucht, einen Weg zum Gruppieren der Objekte basierend auf der Methode und wenden Sie die Summenmethode auf Gruppen. 'Map sumByType = \t \t \t \t \t testSet \t \t \t \t .stream() \t \t \t \t .collect ( \t \t \t \t Collectors.groupingBy ( \t \t \t \t \t CustomObject :: getGroup, \t \t \t \t Collectors.reducing ( \t \t \t \t \t \t 0, \t \t \t \t \t CustomObject :: getQty, \t \t \t \t \t Integer :: sum))); ' –
Harish
ok zuerst alle getGroup shouldn Wenn ich keine hazelCast-Instanz erstelle, werde ich dir eine andere Übung empfehlen, aber ich möchte wissen, wo du das pass id-Argument in der getGroup-Methode planst? –