import
java.util.*;
class
CandyConsumption {
String date;
String candy;
int
consumption;
CandyConsumption(String date, String candy,
int
consumption){
this
.date = date;
this
.candy = candy;
this
.consumption = consumption;
}
public
String toString(){
StringBuffer str =
new
StringBuffer();
str.append( date );
str.append(
"\t\t\t\t"
);
str.append( String.valueOf( candy ) );
str.append(
"\t\t\t\t"
);
str.append( String.format(
"%20s"
, String.valueOf( consumption ) ));
return
str.toString() ;
}
public
static
void
main(String[] args){
CandyConsumption[] cc =
new
CandyConsumption[
9
];
cc[
0
] =
new
CandyConsumption(
"27-08-2022"
,
"skittles"
,
20
);
cc[
1
] =
new
CandyConsumption(
"27-08-2022"
,
"Kitkat"
,
10
);
cc[
2
] =
new
CandyConsumption(
"27-08-2022"
,
"Alpenliebe"
,
20
);
cc[
3
] =
new
CandyConsumption(
"28-08-2022"
,
"Kitkat"
,
30
);
cc[
4
] =
new
CandyConsumption(
"28-08-2022"
,
"Hershey's"
,
25
);
cc[
5
] =
new
CandyConsumption(
"29-08-2022"
,
"Kitkat"
,
30
);
cc[
6
] =
new
CandyConsumption(
"29-08-2022"
,
"skittles"
,
15
);
cc[
7
] =
new
CandyConsumption(
"29-08-2022"
,
"Alpenliebe"
,
20
);
cc[
8
] =
new
CandyConsumption(
"29-08-2022"
,
"Cadbury"
,
45
);
System.out.println(
"Date\t\t\t\t\tCandy\t\t\t\tConsumption"
);
for
(
int
i =
0
; i < cc.length ; i++ ) {
System.out.println(cc[i]) ;
}
System.out.println();
System.out.println();
System.out.println(
"After Aggregation"
);
System.out.println();
aggregate(cc);
}
public
static
void
aggregate(CandyConsumption[] cc){
HashMap<String, HashMap<String, Integer>> map =
new
HashMap<>();
ArrayList<String> dates =
new
ArrayList<>();
HashMap<String, Integer> consumptionDatewise =
new
HashMap<>();
HashMap<String, Integer> consumptionCandywise =
new
HashMap<>();
for
(
int
i=
0
;i<cc.length;i++){
String date = cc[i].date;
String candy = cc[i].candy;
int
consumption = cc[i].consumption;
if
(!map.containsKey(candy)){
map.put(candy,
new
HashMap<>());
}
map.get(candy).put(date, consumption);
if
(!dates.contains(date)){
dates.add(date);
}
if
(!consumptionDatewise.containsKey(date)){
consumptionDatewise.put(date,
0
);
}
consumptionDatewise.put(date, consumptionDatewise.getOrDefault(date,
0
) + consumption);
}
for
(String candy : map.keySet()){
HashMap<String, Integer> candyVal = map.get(candy);
int
total =
0
;
for
(String date : candyVal.keySet()){
total += candyVal.get(date);
}
consumptionCandywise.put(candy, total);
}
System.out.print(String.format(
"%-15s"
,
"Candy/Date"
));
for
(String date : dates){
System.out.print(date +
"\t"
);
}
System.out.println(
"Total"
);
for
(String candy : map.keySet()){
System.out.print(String.format(
"%-15s"
, candy));
HashMap<String, Integer> candyVal = map.get(candy);
for
(
int
I =
0
; I < dates.size(); i++){
if
(!candyVal.containsKey(dates.get(i)))
System.out.print(
"0"
+
"\t\t"
);
else
System.out.print(candyVal.get(dates.get(i)) +
"\t\t"
);
}
System.out.println(consumptionCandywise.get(candy));
}
System.out.print(String.format(
"%-15s"
,
"Total"
));
int
total =
0
;
for
(
int
i=
0
;i<dates.size();i++){
int
candiesOnDate = consumptionDatewise.get(dates.get(i));
total += candiesOnDate;
System.out.print(candiesOnDate +
"\t\t"
);
}
System.out.println(total);
}
}