java8 lambda表達式 進行對list<Map>的分組求和
public static void main(String[] args) {
List<Map<String,Object>> list = new ArrayList<>();
Map map = new HashMap();
map.put("projId","12121");
map.put("count","5");
map.put("projectCode","wwww");
Map map1 = new HashMap();
map1.put("projId","11111");
map1.put("count","3");
map1.put("projectCode","SDJISJD");
Map map2 = new HashMap();
map2.put("projId","11111");
map2.put("count","4");
map2.put("projectCode","SDJISJD");
list.add(map);
list.add(map1);
list.add(map2);
List<Map<String,Object>> result =new ArrayList<>();
//下面的forEach只是處理一些值 可以不加
list.stream().forEach(k->{
k.put("company","公司");
k.put("projectName","哈哈哈");
});
//這個是對你list里面map的某個key進行分組 (會把key的對應的value相同的map放到同一個list里面)
Map<String, List<Map<String, Object>>> glist = list.stream().collect(Collectors.groupingBy(e -> e.get("projectCode").toString()));
glist.forEach((k,slist)->{
Map<String,Object> nmap=new HashMap<>();
//這塊是對某個key進行計算 可以求和 求平均值 求各種值
IntSummaryStatistics sumcc = slist.stream().collect(Collectors.summarizingInt(e->Integer.valueOf(e.get("count").toString())));
nmap.put("company", slist.get(0).get("company"));
nmap.put("projectName", slist.get(0).get("projectName"));
nmap.put("projectCode", slist.get(0).get("projectCode"));
nmap.put("count", sumcc.getSum());//求和
result.add(nmap);
});
//這塊是把處理好的list<map>轉換傳list<實體類>
List<SendDailyResponseDO> ss = result.stream().map(m -> new SendDailyResponseDO(m.getOrDefault("company", "").toString(), m.getOrDefault("projectName", "").toString(), m.getOrDefault("projectCode", "").toString(), m.getOrDefault("projId", "").toString(),((Number)m.getOrDefault("count", "")).intValue()))
.collect(Collectors.toList());
System.out.println(ss.toString());
}
java8 lambda表達式 進行對JSON的轉換,轉實體類 Map
JSONObject json = JSON.parseObject(channelages);
Map<String, List<ClientUpdateByChannelageId>> result = json.entrySet()
.stream().collect(Collectors.toMap(Map.Entry::getKey, entry -> JSON.parseArray(String.valueOf(entry.getValue()), ClientUpdateByChannelageId.class)));
List<ClientUpdateByChannelageId> channelages1 = result.get("channelages");
java8 一個List按照另一個List的數據順序來排序
public static void main(String[] args) {
//排序的條件
List<String> orderRegulation = Arrays.asList("G102", "G103", "G108", "29", "28", "25", "24", "G109", "G105", "26", "21");
//targetList進行排序
List<Posts> targetList = new ArrayList<Posts>();
Posts post3 = new Posts();
post3.setId("G102");
post3.setName("xiaoli3");
post3.setAge("23");
Posts post2 = new Posts();
post2.setId("G103");
post2.setName("xiaoli2");
post2.setAge("22");
Posts post4 = new Posts();
post4.setId("G109");
post4.setName("xiaoli4");
post4.setAge("25");
Posts post7 = new Posts();
post7.setId("G107");
post7.setName("xiaoli7");
post7.setAge("21");
Posts post8 = new Posts();
post8.setId("G101");
post8.setName("xiaoli8");
post8.setAge("26");
Posts post5 = new Posts();
post5.setId("G105");
post5.setName("xiaoli5");
post5.setAge("27");
Posts post1 = new Posts();
post1.setId("G104");
post1.setName("xiaoli1");
post1.setAge("29");
Posts post6 = new Posts();
post6.setId("G106");
post6.setName("xiaoli6");
post6.setAge("23");
Posts post9 = new Posts();
post9.setId("G106");
post9.setName("xiaoli9");
post9.setAge("25");
Posts post10 = new Posts();
post10.setId("G104");
post10.setName("xiaoli10");
post10.setAge("28");
targetList.add(post1);
targetList.add(post2);
targetList.add(post3);
targetList.add(post4);
targetList.add(post5);
targetList.add(post6);
targetList.add(post7);
targetList.add(post8);
targetList.add(post9);
targetList.add(post10);
System.out.println("排列前的數據:");
targetList.forEach(t -> System.out.print(t.getId() + t.getName() + "~" + t.getAge() + " "));
System.out.println();
setListOrder(orderRegulation, targetList);
System.out.println("排序的規則:");
orderRegulation.forEach(t -> System.out.print(t + " "));
System.out.println();
System.out.println("排列后的數據:");
targetList.forEach(t -> System.out.print(t.getId() + t.getName() + "~" + t.getAge() + " "));
}
//平時排序可使用其中一種,下面是綜合兩個條件排序
public static void setListOrder(List<String> orderRegulation, List<Posts> targetList) {
//按照Posts的Id來排序
Collections.sort(targetList, ((o1, o2) -> {
int io1 = orderRegulation.indexOf(o1.getId());
int io2 = orderRegulation.indexOf(o2.getId());
//如果排序的值多余排序條件里面的值,把多余的值放到排序值的后面
if (io1 == -1) {
io1 = targetList.size() - io1;
}
if (io2 == -1) {
io2 = targetList.size() - io2;
}
return io2 - io1;
}));
//按照Posts的age來排序
Collections.sort(targetList, ((o1, o2) -> {
int io1 = orderRegulation.indexOf(o1.getAge());
int io2 = orderRegulation.indexOf(o2.getAge());
if (io1 == -1) {
io1 = targetList.size() - io1;
}
if (io2 == -1) {
io2 = targetList.size() - io2;
}
return io2 - io1;
}));
}