利用Java8的Stream将List转为Map

1,844 阅读1分钟

业务场景

我们拥有一个名为t_setting的设置表, 主要功能为记录用户的各种系统设置信息

但在前端进行展示操作时, 使用的是一个表单而非设置实体的数组(即List<SettingEntity>)

为了处理这种情况, 后台提供一个Map对象作为返回值, 可以理解为SystemSettingVO, 其中属性为每个SettingEntity的code, 属性的值为value

如何把List<SettingEntity>转为Map呢?

方案

先来看一下我们的SettingEntity

@Data
public class SettingEntity extends IdableEntity {

    private String id;
    
    private String code;
    
    private String value;

}

我们将它转换为一个Map, 使用Java8的新特性Stream即可

public class SettingService {

    public Map<String, String> getSettingVO(List<SettingEntity> settings) {
        return settings.stream().collect(Collectors.toMap(SettingEntity::getCode, SettingEntity::getValue);
    }

}

如果需要对code和value进行处理, 比如将它们都转换为int, 可以这么写:

public class SettingService {

    public Map<Integer, Integer> getSettingVO(List<SettingEntity> settings) {
        return settings.stream().collect(Collectors.toMap(setting -> Integer.parseInt(setting.getCode()), setting -> Integer.parseInt(setting.getValue())));
    }

}