
JAVA8的Stream操作
分组之后转Map
java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 公众号:干货食堂
*/
public class Test {
public static void main(String[] args) {
List<Cpv> init = init();
List<Map<String, Object>> hit_val_param = init.stream()
.collect(Collectors.groupingBy(
Cpv::getProp,
Collectors.mapping(Cpv::getVal, Collectors.toList())
))
.entrySet().stream()
.map(e -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("prop", e.getKey());
map.put("valList", e.getValue());
return map;
})
.collect(Collectors.toList());
System.out.println(hit_val_param);
}
/**
* 初始化数据
*/
public static List<Cpv> init() {
List<Cpv> userList = new ArrayList<Cpv>();
userList.add(new Cpv("颜色","红"));
userList.add(new Cpv("颜色","蓝"));
userList.add(new Cpv("颜色","绿"));
userList.add(new Cpv("功能","防水"));
userList.add(new Cpv("材质","木材"));
return userList;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Cpv {
String prop;
String val;
}
}
结果: [{prop=功能, valList=[防水]}, {prop=颜色, valList=[红, 蓝, 绿]}, {prop=材质, valList=[木材]}]