List转多维Map🎉
- List:List< AGABasicTimeLineVO> payload(下面使用的payload)
- 一维Map:Map<String,Object>
- 二维Map:Map<String,Map<Long,Object>>
将在前面
阅读本文前👀,请❗❗❗【确认您的目标Map与上面提到的Map类似】❗❗❗,并在脑海中【明确你所需要的每层key】对应List中的属性
【正常的】List 转一维Map😊
Map<String,Object> NameMapItem = new HashMap<>();
payload.foreach(item -> {
hashMapTiem.put(item.getName(),item);
})
【不优雅的】List 转二维Map😐
Map<String,Map<Long,Object>> nameMapKeyMapValue = new HashMap<>();
payload.forEach(item -> {
String name = item.getName();
long key = item.getKey();
if (nameMapKeyMapValue.containsKey(name)) {
nameMapKeyMapValue.get(name).put(key,item);
} else {
nameMapKeyMapValue.put(name,new HashMap<>());
}
});
【优雅的】List 转二维Map😃
payload.forEach(item -> timelineTable
.computeIfAbsent(item.getName(), key -> new HashMap<>())
.computeIfAbsent(item.getKey(), key -> item.getValue())
);
补充✨
- List 对象内类型 AGABasicTimeLineVO
import lombok.Builder; import lombok.Data; @Data @Builder public class AGABasicTimeLineVO { /** * timestamp */ private long key; private String name; private String value; }
- map.computeIfAbsent 方法传送门
- 除此之外还有compute、computeIfPresent等方法都可以【优雅】代码