У меня есть набор данных, как это:Параллельное вычисление по набору данных в 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}];
Идентификаторы сгруппированы в 3 группы, которые могут быть найдены с помощью метода:
//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";
}
}
testSet выше является с огромными данными, и я хотите выполнить сумму величин каждого объекта в наборе на основе метода группирования выше, используя Java.
Я попытался использовать потоки, но это не позволяет мне использовать метод getGroup в методе groupingBy Java 8 Streams.
Просьба проинструктировать меня о том, как эффективно суммировать значения qty на основе групп с параллельной обработкой.
Как вы используете группировку по методу, вероятно, не работает из-за параметра id –
Да @Bolzano, я не могу использовать это здесь, я пытался найти способ группировать объекты на основе метода и применять метод суммирования на групп. 'Карта = 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 :: сумма))); ' –
Harish
нормально первый каждый getGroup не должен Я создаю экземпляр hazelCast, я предлагаю вам любую другую практику для этого, но я хочу знать, где вы планируете аргумент pass id в методе getGroup? –