diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SimpleQuery.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SimpleQuery.java
index 87acf8388e6336afb72fdbb917eb3faa20980967..67f7f58660a94ff27ae03906eb71b2ef6fbfc9c2 100644
--- a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SimpleQuery.java
+++ b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/SimpleQuery.java
@@ -4,8 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.LambdaUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
@@ -124,7 +123,16 @@ public class SimpleQuery {
*/
@SafeVarargs
public static Map> listGroupBy(List list, SFunction sFunction, Consumer... peeks) {
- return Stream.of(peeks).reduce(list.parallelStream(), Stream::peek, Stream::concat).collect(Collectors.groupingBy(sFunction));
+ return Stream.of(peeks).reduce(list.parallelStream(), Stream::peek, Stream::concat).collect(HashMap::new, (m, v) -> {
+ A key = Optional.ofNullable(v).map(sFunction).orElse(null);
+ List values = m.getOrDefault(key, new ArrayList<>(list.size()));
+ values.add(v);
+ m.put(key, values);
+ }, (totalMap, nowMap) -> nowMap.forEach((k, v) -> {
+ List values = totalMap.getOrDefault(k, new ArrayList<>(list.size()));
+ values.addAll(v);
+ totalMap.put(k, values);
+ }));
}
@@ -141,7 +149,7 @@ public class SimpleQuery {
*/
@SafeVarargs
public static Map list2Map(List list, SFunction keyFunc, Function valueFunc, Consumer... peeks) {
- return Stream.of(peeks).reduce(list.parallelStream(), Stream::peek, Stream::concat).collect(Collectors.toMap(keyFunc, valueFunc, (l, r) -> l));
+ return Stream.of(peeks).reduce(list.parallelStream(), Stream::peek, Stream::concat).collect(HashMap::new, (m, v) -> m.put(keyFunc.apply(v), valueFunc.apply(v)), HashMap::putAll);
}
diff --git a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/SimpleQueryTest.java b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/SimpleQueryTest.java
index 08457a57727016f4c8ab647279bb8eb066de6c4b..9795745d5b9d446c58a9223216cf18cda7ccecb9 100644
--- a/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/SimpleQueryTest.java
+++ b/mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/toolkit/SimpleQueryTest.java
@@ -29,7 +29,7 @@ public class SimpleQueryTest extends BaseDbTest {
// 可叠加后续操作
List names = SimpleQuery.list(Wrappers.lambdaQuery(), Entity::getName, e -> Optional.ofNullable(e.getName()).map(String::toUpperCase).ifPresent(e::setName));
- Assert.isTrue(names.equals(Arrays.asList("RUBEN", "A CHAO")), "Ops!");
+ Assert.isTrue(names.equals(Arrays.asList("RUBEN", null)), "Ops!");
}
@Test
@@ -47,12 +47,8 @@ public class SimpleQueryTest extends BaseDbTest {
// 校验结果
Map map = new HashMap<>(1 << 2);
map.put(1L, "ruben");
- map.put(2L, "a chao");
+ map.put(2L, null);
Assert.isTrue(idNameMap.equals(map), "Ops!");
-
- // 同样支持叠加后续操作
-// SimpleQuery.keyMap(Wrappers.lambdaQuery(), Entity::getId, System.out::println, System.out::println);
-
}
@Test
@@ -71,8 +67,8 @@ public class SimpleQueryTest extends BaseDbTest {
Map> map = new HashMap<>(1 << 2);
Entity chao = new Entity();
chao.setId(2L);
- chao.setName("a chao");
- map.put("a chao", Collections.singletonList(chao));
+ chao.setName(null);
+ map.put(null, Collections.singletonList(chao));
Entity ruben = new Entity();
ruben.setId(1L);
@@ -87,7 +83,7 @@ public class SimpleQueryTest extends BaseDbTest {
@Override
protected String tableDataSql() {
- return "insert into entity(id,name) values(1,'ruben'),(2,'a chao');";
+ return "insert into entity(id,name) values(1,'ruben'),(2,null);";
}
@Override