diff --git a/mergedemo/.idea/.gitignore b/mergedemo/.idea/.gitignore new file mode 100644 index 0000000..c68e6c2 --- /dev/null +++ b/mergedemo/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/../../../../:\java project\mergedemo\.idea/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/mergedemo/.idea/compiler.xml b/mergedemo/.idea/compiler.xml new file mode 100644 index 0000000..b15642a --- /dev/null +++ b/mergedemo/.idea/compiler.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mergedemo/.idea/jarRepositories.xml b/mergedemo/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/mergedemo/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/mergedemo/.idea/misc.xml b/mergedemo/.idea/misc.xml new file mode 100644 index 0000000..4b661a5 --- /dev/null +++ b/mergedemo/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/mergedemo/mergedemo.iml b/mergedemo/mergedemo.iml new file mode 100644 index 0000000..78b2cc5 --- /dev/null +++ b/mergedemo/mergedemo.iml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/mergedemo/pom.xml b/mergedemo/pom.xml new file mode 100644 index 0000000..93accab --- /dev/null +++ b/mergedemo/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + com.woniu + mergedemo + 1.0-SNAPSHOT + + + + org.projectlombok + lombok + 1.18.24 + + + + + \ No newline at end of file diff --git a/mergedemo/src/main/java/com/woniu/mergedemo/MainTest.java b/mergedemo/src/main/java/com/woniu/mergedemo/MainTest.java new file mode 100644 index 0000000..3282b81 --- /dev/null +++ b/mergedemo/src/main/java/com/woniu/mergedemo/MainTest.java @@ -0,0 +1,52 @@ +package com.woniu.mergedemo; + + +import java.util.*; + +/** + * Java 8 中 Map的一个骚操作!好用到爆!! + * + * 假设我们有这么一段业务逻辑, + * 我有一个学生成绩对象的列表, + * 对象包含学生姓名、科目、科目分数三个属性, + * 要求求得每个学生的总成绩。 + */ +public class MainTest { + + public static void main(String[] args) { + List studentScoreList = Arrays.asList( + new StudentScore("张三", "语文", 70), + new StudentScore("张三", "数学", 70), + new StudentScore("张三", "英语", 65), + new StudentScore("李四", "语文", 68), + new StudentScore("李四", "数学", 70), + new StudentScore("李四", "英语", 90), + new StudentScore("王五", "语文", 80), + new StudentScore("王五", "数学", 85), + new StudentScore("王五", "英语", 70) + ); + + Map studentScoreMap = new HashMap<>(); + studentScoreList.forEach(studentScore -> { + if (studentScoreMap.containsKey(studentScore.getStuName())) { + studentScoreMap.put(studentScore.getStuName(), studentScoreMap.get(studentScore.getStuName()) + studentScore.getScore()); + } else { + studentScoreMap.put(studentScore.getStuName(), studentScore.getScore()); + } + }); + + + Map studentScoreMap2 = new HashMap<>(); + + studentScoreList.forEach(studentScore -> studentScoreMap2.merge( + studentScore.getStuName(), + studentScore.getScore(), + (oldValue, newValue) -> oldValue + newValue)); + //merge() 方法会先判断指定的 key 是否存在,如果不存在,则添加键值对到 hashMap 中。 + + + } + + + +} diff --git a/mergedemo/src/main/java/com/woniu/mergedemo/StudentScore.java b/mergedemo/src/main/java/com/woniu/mergedemo/StudentScore.java new file mode 100644 index 0000000..72ec939 --- /dev/null +++ b/mergedemo/src/main/java/com/woniu/mergedemo/StudentScore.java @@ -0,0 +1,12 @@ +package com.woniu.mergedemo; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class StudentScore { + private String stuName; + private String subject; + private int score; +} diff --git a/mergedemo/target/classes/com/woniu/mergedemo/MainTest.class b/mergedemo/target/classes/com/woniu/mergedemo/MainTest.class new file mode 100644 index 0000000..b88d431 Binary files /dev/null and b/mergedemo/target/classes/com/woniu/mergedemo/MainTest.class differ diff --git a/mergedemo/target/classes/com/woniu/mergedemo/StudentScore.class b/mergedemo/target/classes/com/woniu/mergedemo/StudentScore.class new file mode 100644 index 0000000..bc37952 Binary files /dev/null and b/mergedemo/target/classes/com/woniu/mergedemo/StudentScore.class differ