Stream groupingBy a list of enum types

前端 未结 2 1989
旧巷少年郎
旧巷少年郎 2021-01-23 01:15

I have a Product class:

class Product {
    String name;
    List group;
    //more fields, getters, setters
    public Product(String name, Group..         


        
2条回答
  •  灰色年华
    2021-01-23 02:13

    You can flatMap the group within each Product to the name of the product and then group it by Group mapping the corresponding names as value. Such as:

    Map> groupToNameMapping = productList.stream()
            .flatMap(product -> product.getGroup().stream()
                    .map(group -> new AbstractMap.SimpleEntry<>(group, product.getName())))
            .collect(Collectors.groupingBy(Map.Entry::getKey,
                    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
    

    or to get a mapping of the group to list of product, you can formulate the same as:

    Map> groupToProductMapping = productList.stream()
            .flatMap(product -> product.getGroup().stream()
                    .map(group -> new AbstractMap.SimpleEntry<>(group, product)))
            .collect(Collectors.groupingBy(Map.Entry::getKey,
                    Collectors.mapping(Map.Entry::getValue, Collectors.toList())));
    

提交回复
热议问题