如何使用group by获取实体中新列的列表

use*_*426 5 java java-8 java-stream

我有一个具有这样的值的Answer实体

question answer 
1           x
2           y
3           z
4           p
1           x
2           q
3           r
Run Code Online (Sandbox Code Playgroud)

我需要逐个问题地得到答案

Map<Integer, List<String>>
<1, [x,x]
 2, [y,p]
 3, [z,r]
 4, [p]>
Run Code Online (Sandbox Code Playgroud)

我可以List<Answer>这样

Map<Integer, List<Answer>> collect = answers
    .stream()
    .collect(Collectors.groupingBy(Answer::getQuestion));
Run Code Online (Sandbox Code Playgroud)

但我找不到一种方法来获得它List<String>而不是List<Answer>

Eug*_*ene 5

 Map<Integer, List<String>> collect = answers
         .stream()
          .collect(Collectors.groupingBy(
                Answer::getQuestion,
                Collectors.mapping(Answer::getAnswerAsString, Collectors.toList())       
));
Run Code Online (Sandbox Code Playgroud)

只需用getAnswerAsString你从中获取String的方法替换即可Answer.