Java- 哈希图 - 数据分组
Java- Hash Map - Data Grouping
有没有办法我们可以按照下面的输出对它进行分组
输入数据json
[
{
'Car': 'BWM',
'Country': 'Germany',
'Amount': 13469,
'Dateof Purchase':20-08-2020
},
{
'Car': 'Audi',
'Country': 'Germany',
'Amount': 14469,
'Dateof Purchase':10-01-2020
}
{
'Car': 'Telsa',
'Country': 'American',
'Amount': 11449,
'Dateof Purchase':15-12-2020
}
]
输出
Germany -27938 <-- Total Amount
BWM : 13469
Audi: 14469
American-11449 <-- Total Amount
Telsa 11449
我尝试使用以下代码,但只能获得汽车国家总数
Map<String, Integer> Total_Vech = listData.stream()
.collect(Collectors.groupingBy(Vech::getbycountry,
Collectors.summingInt(Vech::getsAmount)));
任何帮助都会有帮助!!!
您需要自定义数据结构:
class CountryStats {
private int amount;
private Map<String, Integer> cars = new HashMap<>();
void addCar(String car, int amount) {
this.amount += amount;
this.cars.merge(car, amount, Integer::sum);
}
CountryStats merge(CountryStats country) {
country.cars.forEach(this::addCar);
return this;
}
}
然后你可以这样收集:
Map<String, CountryStats> statsByCountry = data.stream().collect(
Collectors.groupingBy(data -> data.getCountry(), Collector.of(
CountryStats::new,
(stats, data) -> stats.addCar(data.getCar(), data.getAmount()),
CountryStats::merge)));
有没有办法我们可以按照下面的输出对它进行分组
输入数据json
[
{
'Car': 'BWM',
'Country': 'Germany',
'Amount': 13469,
'Dateof Purchase':20-08-2020
},
{
'Car': 'Audi',
'Country': 'Germany',
'Amount': 14469,
'Dateof Purchase':10-01-2020
}
{
'Car': 'Telsa',
'Country': 'American',
'Amount': 11449,
'Dateof Purchase':15-12-2020
}
]
输出
Germany -27938 <-- Total Amount
BWM : 13469
Audi: 14469
American-11449 <-- Total Amount
Telsa 11449
我尝试使用以下代码,但只能获得汽车国家总数
Map<String, Integer> Total_Vech = listData.stream()
.collect(Collectors.groupingBy(Vech::getbycountry,
Collectors.summingInt(Vech::getsAmount)));
任何帮助都会有帮助!!!
您需要自定义数据结构:
class CountryStats {
private int amount;
private Map<String, Integer> cars = new HashMap<>();
void addCar(String car, int amount) {
this.amount += amount;
this.cars.merge(car, amount, Integer::sum);
}
CountryStats merge(CountryStats country) {
country.cars.forEach(this::addCar);
return this;
}
}
然后你可以这样收集:
Map<String, CountryStats> statsByCountry = data.stream().collect(
Collectors.groupingBy(data -> data.getCountry(), Collector.of(
CountryStats::new,
(stats, data) -> stats.addCar(data.getCar(), data.getAmount()),
CountryStats::merge)));