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