简体   繁体   中英

Convert List to grouped list in Java Spring Boot

I want to convert the below list with attributes to group the similar group and concatenate the subgroup values as below expected output using Java Spring Boot. This is my code.

    for (JuniorAreaSubgroup value : lstJuniorAreaSubgroup) {
        juniorAreaSubgroupMap.setJuniorArea(value.getJuniorArea());
        lstSubgroup.add(lstJuniorAreaSubgroup.stream().filter(value.getJuniorArea()) -> 
                String.join(",", value.getSubgroup()));
        juniorAreaSubgroupMap.setSubgroup(lstSubgroup);
        lstSubgroup.clear();
    }

-

[
{
    "group": "Tins",
    "subgroup": "G13AA"
},
{
    "group": "Tins",
    "subgroup": "G13AD"
},
{
    "group": "Cans",
    "subgroup": "G13DA"
},
{
    "group": "Cans",
    "subgroup": "G13DB"
},
{
    "group": "Cans",
    "subgroup": "G13DD"
}
]

Expected Output:

[
{
    "group": "Tins",
    "subgroup": [“G13AA”, "G13AD”]
},
{
    "group": "Cans",
    "subgroup": [“G13DA”, "G13DB”, "G13DD”]
} 
]

Any help is appreciated.

Your data looks like JSON. This example will set up the data with proper Java objects instead:

public class Grouping {

    public class Person {
        String group;
        String subgroup;

        Person(String group, String subgroup){
            this.group = group;
            this.subgroup=subgroup;
        }
    }

    @Test
    public void test() {
        List<Person> list = new ArrayList<>();

        list.add(new Person("Tins", "G13AA"));
        list.add(new Person("Tins", "G13AD"));
        list.add(new Person("Cans", "G13DA"));
        list.add(new Person("Cans", "G13DB"));
        list.add(new Person("Cans", "G13DD"));

        Map<String, List<String>> result = list.stream()
              .collect(Collectors.groupingBy(p->p.group, Collectors.mapping(p->p.subgroup, Collectors.toList())));

        System.out.println(result);
    }

}

will result in:

{Cans=[G13DA, G13DB, G13DD], Tins=[G13AA, G13AD]}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM