如何在java 8中groupingBy之后仅从对象中提取ID

Kun*_*tra 1 java collections java-8 java-stream

public class Element {

    private Long id;

    private String groupType;

}
Run Code Online (Sandbox Code Playgroud)

我有元素列表。具有不同组类型的列表,例如“group1”、“group2”{1,group1}、{2,group1}、{3,group2}{4,group2}

我想为每个组创建两个不同列表的地图,但使用 ids(Map>) 而不是使用 Element 对象 Map>

下面的代码对于 Map> ie 工作正常

Map<String, List<Element>> elementByGroup = new HashMap<>();
        elementByGroup = element.stream().collect(
                Collectors.groupingBy(Element::getGroupType));
Run Code Online (Sandbox Code Playgroud)

如何以 Map<String, List<Long>> 的形式收集结果。我知道通过迭代 Map,然后迭代列表,我们可以在没有 java 8 的情况下获得 id 列表。但是我想通过在 groupingby 函数之后使用上面的代码进行操作来执行相同的操作。

小智 8

您需要使用Collectors.mapping()。它看起来像这样

Map<String, List<Long>> idsByGroupType = 
  elements.stream().collect(
    Collectors.groupingBy(Element::getGroupType,
      Collectors.mapping(Element::getId, Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)