代码之家  ›  专栏  ›  技术社区  ›  Marsellus Wallace

如何使用特定的键和值将流分组到映射?

  •  6
  • Marsellus Wallace  · 技术社区  · 5 年前

    我有一个 Stream<Pair<String, String>> myStream; 我想把它聚合成一个 Map<String, Set<String>> result;

    我设法做到了以下几点:

    Map<String, Set<Pair<String, String>>> result = myStream
      .collect(Collectors.groupingBy(Pair::getKey, Collectors.toSet()));
    

    此操作失败,原因是“无法从静态上下文引用非静态方法”:

    Map<String, Set<String>> result = myStream
      .collect(Collectors.groupingBy(Pair::getKey, Pair::getValue, Collectors.toSet()));
    

    我做错什么了?

    1 回复  |  直到 5 年前
        1
  •  7
  •   Andreas LppEdd    5 年前

    正确的代码是:

    Map<String, Set<String>> result = myStream
      .collect(Collectors.groupingBy(Pair::getKey,
                  Collectors.mapping(Pair::getValue, Collectors.toSet())));
    

    如果你使用 import static ,简称为:

    Map<String, Set<String>> result = myStream
      .collect(groupingBy(Pair::getKey, mapping(Pair::getValue, toSet())));