Java使用Lambda表达式List转map
常用方法汇总
//返回key的实体map
Map<String,DemoModel> modelMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, demo -> demo));
//返回key,value 的map
Map<String,String> keyValueMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, DemoModel::getValue));
//key值重复问题
Map<String,String> keyRepeatValueMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, DemoModel::getValue, (key1, key2) -> key2));
//key值为null问题
Map<String,String> keyNullValueMap = list.stream().collect(HashMap::new,(m, v) -> m.put(v.getKey() != null ? v.getKey() : "null",v.getValue()),HashMap::putAll);
//复合key
Map<String,String> keyTypeValueMap = list.stream().collect(HashMap::new,(m, v) -> m.put(String.format("%s:%s",v.getType(),v.getKey()) ,v.getValue()),HashMap::putAll);
//不同的map实现类
LinkedHashMap<String,String> keyTypeValueLinkedMap = list.stream().collect(LinkedHashMap::new,(m, v) -> m.put(String.format("%s:%s",v.getType(),v.getKey()) ,v.getValue()),HashMap::putAll);
}
demo测试
import lombok.Data;
@Data
public class DemoModel{
private String key;
private String type;
private String value;
public DemoModel(String key, String type, String value) {
this.key = key;
this.type = type;
this.value = value;
}
}
@Test
public void testDemo() {
List<DemoModel> list = new ArrayList();
DemoModel model = new DemoModel("key","type","model11");
DemoModel model2 = new DemoModel("key2","type","model12");
DemoModel model3 = new DemoModel("key3","type2","model23");
list.add(model);
list.add(model2);
list.add(model3);
//返回key的实体map
Map<String,DemoModel> modelMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, demo -> demo));
System.out.println(JsonUtil.toJsonStr(modelMap));
//返回key,value 的map
Map<String,String> keyValueMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, DemoModel::getValue));
System.out.println(JsonUtil.toJsonStr(keyValueMap));
//key值重复问题
DemoModel model4 = new DemoModel("key","type2","model21");
list.add(model4);
Map<String,String> keyRepeatValueMap = list.stream().collect(Collectors.toMap(DemoModel::getKey, DemoModel::getValue, (key1, key2) -> key2));
System.out.println(JsonUtil.toJsonStr(keyRepeatValueMap));
//key值为null问题
DemoModel model5 = new DemoModel(null,"type2","model2null");
list.add(model5);
Map<String,String> keyNullValueMap = list.stream().collect(HashMap::new,(m, v) -> m.put(v.getKey() != null ? v.getKey() : "null",v.getValue()),HashMap::putAll);
System.out.println(JsonUtil.toJsonStr(keyNullValueMap));
//复合key
Map<String,String> keyTypeValueMap = list.stream().collect(HashMap::new,(m, v) -> m.put(String.format("%s:%s",v.getType(),v.getKey()) ,v.getValue()),HashMap::putAll);
System.out.println(JsonUtil.toJsonStr(keyTypeValueMap));
//不同的map实现
LinkedHashMap<String,String> keyTypeValueLinkedMap = list.stream().collect(LinkedHashMap::new,(m, v) -> m.put(String.format("%s:%s",v.getType(),v.getKey()) ,v.getValue()),HashMap::putAll);
System.out.println(JsonUtil.toJsonStr(keyTypeValueLinkedMap));
}
ps:自留工具,仅供参考