> 由 Document 对象中的变量与 Java 8 流 (lamda) 在一行中分组,java,lambda,collections,java-8,java-stream"/>

首页 > 解决方案 > 转换列表到地图> 由 Document 对象中的变量与 Java 8 流 (lamda) 在一行中分组

问题描述

我有一个对象列表,我想将其转换为按对象中的一个变量分组的 Map。下面是我得到的冗长代码。有人可以帮我在一行中做到这一点吗?

    List<Document> all = repo.getAllDocuments();

    List<String> ids = all.parallelStream()
            .map(obj -> obj.getFor().getOpp().Id())
            .collect(Collectors.toList());

    Map<String, List<Document>> map = new HashMap<>();

    ids.forEach(id -> map.put(id, all.parallelStream()
            .filter(obj -> obj.getFor().getOpp().getId().equals(id))
            .collect(Collectors.toList())));

标签: javalambdacollectionsjava-8java-stream

解决方案


试试这个:

Map<String, List<Document>> map = 
    repo.getAllDocuments()
        .stream()
        .collect(Collectors.groupingBy(doc -> doc.getFor().getOpp().getId()));

推荐阅读