Я хочу получить агрегированный вывод из моей карты, используя функции группировки потоков.в основном я хочу многоуровневую групповую передачу с использованием потока.У меня есть карта с некоторыми данными, и я хочу, чтобы в качестве выходных данных была карта с агрегированными данными.
В целом в ней есть cityArea с различными областями PinP внутри.У каждого areaPin есть два раздела: 1 и 2. Я хочу суммировать соответствующий счетчик по разделам и хочу, чтобы данные агрегации на cityId.Пожалуйста, обратитесь ниже классов.Таким образом, у меня есть агрегированная информация по cityId + areaPin, и я хочу получить из нее агрегированную информацию по cityId.
CityArea:
public class CityArea {
String cityId;
String areaPin;
public String getCityId() {
return cityId;
}
public void setCityId(String cityId) {
this.cityId = cityId;
}
public String getAreaPin() {
return areaPin;
}
public void setAreaPin(String areaPin) {
this.areaPin = areaPin;
}
public CityArea(String cityId, String areaPin) {
super();
this.cityId = cityId;
this.areaPin = areaPin;
}
public CityArea() {
super();
}
}
ResourceCount:
public class ResourceCount {
Integer streetLightCount;
Integer waterTankCount;
public Integer getStreetLightCount() {
return streetLightCount;
}
public void setStreetLightCount(Integer streetLightCount) {
this.streetLightCount = streetLightCount;
}
public Integer getWaterTankCount() {
return waterTankCount;
}
public void setWaterTankCount(Integer waterTankCount) {
this.waterTankCount = waterTankCount;
}
public ResourceCount(Integer streetLightCount, Integer waterTankCount) {
super();
this.streetLightCount = streetLightCount;
this.waterTankCount = waterTankCount;
}
public ResourceCount() {
super();
}
}
Пример кода:
Map<CityArea, Map<Integer,ResourceCount>> map = new HashMap<>();
CityArea ca1= new CityArea("cityId1", "1");
CityArea ca2= new CityArea("cityId1", "2");
CityArea ca3= new CityArea("cityId2", "1");
CityArea ca4= new CityArea("cityId2", "2");
ResourceCount resourceCount1 = new ResourceCount(10, 10);
ResourceCount resourceCount2 = new ResourceCount(10, 10);
Map<Integer,ResourceCount> resourceMap1 = new HashMap<>();
resourceMap1.put(1, resourceCount1);
resourceMap1.put(2, resourceCount2);
map.put(ca1, resourceMap1);
map.put(ca2, resourceMap1);
Map<Integer,ResourceCount> resourceMap2 = new HashMap<>();
resourceMap2.put(1, resourceCount1);
resourceMap2.put(2, resourceCount2);
map.put(ca3, resourceMap2);
map.put(ca4, resourceMap2);
Ввод:
{
CityArea [cityId=cityId2, areaPin=2]=
{1=ResourceCount [streetLightCount=10, waterTankCount=10],
2=ResourceCount [streetLightCount=20, waterTankCount=20]},
CityArea [cityId=cityId1, areaPin=2]=
{1=ResourceCount [streetLightCount=10, waterTankCount=10],
2=ResourceCount [streetLightCount=20, waterTankCount=20]},
CityArea [cityId=cityId1, areaPin=1]=
{1=ResourceCount [streetLightCount=10, waterTankCount=10],
2=ResourceCount [streetLightCount=20, waterTankCount=20]},
CityArea [cityId=cityId2, areaPin=1]=
{1=ResourceCount [streetLightCount=10, waterTankCount=10],
2=ResourceCount [streetLightCount=20, waterTankCount=20]}
}
Ожидаемая карта вывода:
Map<String, Map<Integer, ResourceCount>>
cityId1 = {1=ResourceCount [streetLightCount=20, waterTankCount=20],
2=ResourceCount [streetLightCount=40, waterTankCount=40]},
cityId2 = {1=ResourceCount [streetLightCount=20, waterTankCount=20],
2=ResourceCount [streetLightCount=40, waterTankCount=40]}