Skip to content
鼓励作者:欢迎打赏犒劳

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=[木材]}]

如有转载或 CV 的请标注本站原文地址