常用工具类
1 List转化为 Map>
static Map> getMapFromTheList(List
e.g. List -> Map
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
static Map> getMapFromTheList(List
{date=[2021-06-03, 2021-06-04, 2021-06-05, 2021-06-06], temp=[17-29°C, 17-30°C, 18-32°C, 17-29°C], weather=[晴, 晴, 多云, 多云], wind=[西北风3-4级, 北风3-4级, 西北风3-4级, 东北风3级]}
2 以相同K 合并两个List> 为一个List> ,并根据K 的 V排序
static List> merge(List> m1, List> m2, String key) {
m1.addAll(m2);
Set set = new HashSet<>();
List> list = m1.stream().collect(Collectors.groupingBy(o -> {
set.addAll(o.keySet());
return o.get(key);
})).values().stream().map(maps -> {
Map map = maps.stream().flatMap(m -> {
return m.entrySet().stream();
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));
set.forEach(k -> {
if (!map.containsKey(k)) {
map.put(k, 0);
}
});
return map;
}).sorted(Comparator.comparing(map -> map.get(key).toString())).collect(Collectors.toList());
return list;
}
e.g. 两个List 根据date合并并排序 -> List
注意日期应该是date等格式,我例子是String
import java.util.*;
import java.util.stream.Collectors;
public class Main {
static List> merge(List> m1, List> m2, String key) {
m1.addAll(m2);
Set set = new HashSet<>();
List> list = m1.stream().collect(Collectors.groupingBy(o -> {
set.addAll(o.keySet());
return o.get(key);
})).values().stream().map(maps -> {
Map map = maps.stream().flatMap(m -> {
return m.entrySet().stream();
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> b));
set.forEach(k -> {
if (!map.containsKey(k)) {
map.put(k, 0);
}
});
return map;
}).sorted(Comparator.comparing(map -> map.get(key).toString())).collect(Collectors.toList());
return list;
}
public static void main(String[] args) {
List> list1 = new ArrayList<>();
List> list2 = new ArrayList<>();
Map map1 = new HashMap<>();
Map map2 = new HashMap<>();
Map map3 = new HashMap<>();
Map map4 = new HashMap<>();
map1.put("date","2021-06-03");
map1.put("weather","晴");
map1.put("wind","西北风3-4级");
map1.put("temp","17-29°C");
list1.add(map1);
map2.put("date","2021-06-04");
map2.put("weather","晴");
map2.put("wind","北风3-4级");
map2.put("temp","17-30°C");
list1.add(map2);
map3.put("date","2021-06-03");
map3.put("city","长安");
list2.add(map3);
map4.put("date","2021-06-04");
map4.put("city","幽州");
list2.add(map4);
List> list = merge(list1,list2,"date");
System.out.println(list);
}
}
[{date=2021-06-03, temp=17-29°C, city=长安, weather=晴, wind=西北风3-4级}, {date=2021-06-04, temp=17-30°C, city=幽州, weather=晴, wind=北风3-4级}]
3 将List> 的K 全部转化为大写或者小写(不传参数或者1默认大写,其他小写)
static List> convertKeyCase (List> list,int...s) {
return list.stream()
.map(m -> m.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(p -> s.length == 0 || s[0]==1 ? p.getKey().toUpperCase():p.getKey().toLowerCase(),
Map.Entry::getValue,
(v1,v2)->v1,
LinkedHashMap::new)))
.collect(Collectors.toList());
}
e.g. 根据K排序并使用LinkedHashMap 保证插入顺序,可替换为TreeMap
import java.util.*;
import java.util.stream.Collectors;
public class Test {
static List> convertKeyCase (List> list,int...s) {
return list.stream()
.map(m -> m.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(p -> s.length == 0 || s[0]==1 ? p.getKey().toUpperCase():p.getKey().toLowerCase(),
Map.Entry::getValue,
(v1,v2)->v1,
LinkedHashMap::new)))
.collect(Collectors.toList());
}
public static void main(String[] args) {
List> list1 = new ArrayList<>();
Map map1 = new HashMap<>();
Map map2 = new HashMap<>();
map1.put("weather","1");
map1.put("date","2021-06-03");
map1.put("wind","2-3");
map1.put("temp","17-29°C");
map1.put("a","18");
list1.add(map1);
map2.put("weather","1");
map2.put("date","2021-06-04");
map2.put("wind","3-4");
map2.put("temp","17-30°C");
map2.put("a","20");
list1.add(map2);
List> list = convertKeyCase(list1);
List> list2 = convertKeyCase(list1,0);
System.out.println(list);
System.out.println(list2);
}
}
[{A=18, DATE=2021-06-03, TEMP=17-29°C, WEATHER=1, WIND=2-3}, {A=20, DATE=2021-06-04, TEMP=17-30°C, WEATHER=1, WIND=3-4}]
[{a=18, date=2021-06-03, temp=17-29°C, weather=1, wind=2-3}, {a=20, date=2021-06-04, temp=17-30°C, weather=1, wind=3-4}]