今天介绍一个实用的小知识点,如何将List转为Map<Object, List<Object>>
1. 基本写法
最开始介绍的当然是最常见、最直观的写法,当然也是任何限制的写法
// 比如将下面的列表,按照字符串长度进行分组
List<String> list = new ArrayList<>();
list.add("hello");
list.add("word");
list.add("come");
list.add("on");
Map<Integer, List<String>> ans = new HashMap<>();
for(String str: list) {
List<String> sub = ans.get(str.length());
if(sub == null) {
sub = new ArrayList<>();
ans.put(str.length(), sub);
}
sub.add(str);
}
System.out.println(ans);
复制代码
对于jdk8+,上面for循环中的内容可以利用Map.computeIfAbsent
来替换,具体写法如下
for (String str : list) {
ans.computeIfAbsent(str.length(), k -> new ArrayList<>()).add(str);
}
复制代码
当然既然已经是jdk1.8了,借助Stream的流处理,可以将上面的更一步进行简化,如下