java steam() 分组后按照指定格式输出map

ansee.z安子博 2020-06-21 10:23:13
现在 buss.stream().collect(Collectors.groupingBy(object::getType)); 分组后是按照Map<String,List<object>> 来接收的,怎样写能按照想要的格式输出,比如我想分组后key是TYPE,val是object中的一个属性,(例:结果:Map<String,List<string>> :key:type,val:object.name)
...全文
5705 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
好大的月亮 2020-06-23
  • 打赏
  • 举报
回复
用楼上的思路就可以了,大概就是,我的写法可能不是最简略的 list.stream().collect(Collectors.groupingBy(e -> e.get("type"))) .entrySet().stream().collect( Collectors.toMap(it->it.getKey(),it->it.getValue().stream().map(temp->temp.get("name")).collect(Collectors.toList()),(key1,key2) ->key2) )
zy_think123 2020-06-23
  • 打赏
  • 举报
回复


public class Test {
    public static void main(String[] args) {

        Product product1 = new Product("type1", "name1");

        Product product2 = new Product("type1", "name2");

        Product product3 = new Product("type2", "name2");

        Product product4 = new Product("type3", "name3");

        List<Product> list = new ArrayList<>();


        list.addAll(Arrays.asList(product1,product2,product3,product4));

        Map<String, List<String>> result = list.stream()
                .collect(Collectors.toMap(p -> p.getType(), p -> Collections.singletonList(p.getName()),
                        (existValue,newValue)-> {
                            List<String> r = new ArrayList<>(existValue);
                            r.addAll(newValue);
                            return r;
                        }));

        System.out.println(result);

    }
}

@Data
@AllArgsConstructor
class Product {

    String type;

    String name;
}
输出结果如下:
{type3=[name3], type2=[name2], type1=[name1, name2]}
w401557499 2020-06-22
  • 打赏
  • 举报
回复
groupingBy以后再遍历map,将value进行value.stream().map(obj->obj.name)转换后,再put到map中。

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧