按类别划分和映射java流

Grz*_*nio 0 java java-8 java-stream

这个问题是对类别中的分区java流的一种后续跟进

我有一个stream<A>,在哪里

class A {
  String category();
  String data();
}
Run Code Online (Sandbox Code Playgroud)

我想得到一个map<String, list<String>>,其中原始流基于值被分区为子列表category(),然后映射到仅提取data().使用for循环实现它是非常简单的,但是有可能获得利用java流的更优雅的解决方案吗?

例:

鉴于{[a, xyz], [a, zyx], [b, abc]},我想得到一张地图:

a -> {xyz, zyx}
b -> {abc}
Run Code Online (Sandbox Code Playgroud)

Eug*_*ene 8

你需要稍微不同 groupBy

  stream.collect(Collectors.groupingBy(A::getCategory, 
         Collectors.mapping(A::data, Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)