项目中有个需求:需要将list<CmdVo> 根据cmd字段分组后再转换成list<Params>。虽然需求有点脑残,主要记录下stream流的使用吧。使用stream流转换真的很方便。
@Data
public class CmdVo {
private String cmd;
private String param;
private Object value;
}
@Data
public class Param {
private String cmd;
private Map<String, String> param;
}
// 需要验证,自行添加元素
List<CmdVo> cmdList = new ArrayList<>();
Map<String, Map<String, String>> map = cmdList.stream().collect(Collectors.groupingBy(CmdVo::getCmd, Collectors.toMap(CmdVo::getParam, vo -> vo.getValue().toString())));
List<Param> paramList = map.keySet().stream()
.map(key -> {
ParamVo vo = new ParamVo();
vo.setCmd(key);
vo.setParam(cmdMap.get(key));
return vo;
})
.collect(Collectors.toList());