I have the following json data
[
{
"type": "A",
"name": "SSS",
"label": "SSS"
},
{
"type": "A",
"name": "FFF",
"label": "FFF"
},
{
"type": "B",
"name": "GGG",
"label": "GGG"
},
{
"type": "A",
"name": "HHH",
"label": "HHH"
},
{
"type": "B",
"name": "JJJ",
"label": "JJJ"
},
{
"type": "B",
"name": "BBB",
"label": "BBB"
},
{
"type": "A",
"name": "AAA",
"label": "AAA"
},
{
"type": "B",
"name": "WWW",
"label": "WWW"
}
]
I want to format the above json data as shown below
[
{
"label": "A",
"options": [
{
"value": "SSS",
"label": "SSS"
},
{
"value": "FFF",
"label": "FFF"
},
{
"value": "HHH",
"label": "HHH"
},
{
"value": "AAA",
"label": "AAA"
}
]
},
{
"label": "B",
"options": [
{
"value": "GGG",
"label": "GGG"
},
{
"value": "JJJ",
"label": "JJJ"
},
{
"value": "BBB",
"label": "BBB"
},
{
"value": "WWW",
"label": "WWW"
}
]
}
]
I tried to group by using streams like as shown below
List<TypeData> datas = new ArrayList<>();
datas.add(new TypeData("A","SSS","SSS"));
datas.add(new TypeData("A","FFF","FFF"));
datas.add(new TypeData("B","GGG","GGG"));
datas.add(new TypeData("A","HHH","HHH"));
datas.add(new TypeData("B","JJJ","JJJ"));
datas.add(new TypeData("B","BBB","BBB"));
datas.add(new TypeData("A","AAA","AAA"));
datas.add(new TypeData("B","WWW","WWW"));
My code is as give below and the below java code gives me the actual json structure
List<OptionGroup> optionGroups = new ArrayList<>();
for (TypeData typedata : datas) {
boolean labelFound = false;
for(OptionGroup optionGroupDetail : optionGroups) {
if(optionGroupDetail.getLabel().equals(typedata.getType())) {
labelFound = true;
optionGroupDetail.getOptions().add(new Options(typedata.getLabel(), typedata.getName()));
}
}
if(!labelFound) {
OptionGroup newOptionGroup = new OptionGroup(typedata.getType(), Lists.newArrayList(new Options(typedata.getLabel(), typedata.getName())));
optionGroups.add(newOptionGroup);
}
}
How can I make the above java logic into Streams.
My class definition is as shown below
TypeData.java
class TypeData {
String type;
String name;
String label;
// getter and setter
}
Options.java
class Options {
String label;
String value;
// getter and setter
}
OptionGroup.java
class OptionGroup {
String label;
List <Options> options;
// getter and setter
}
can someone please help me on this