From df59f2344e5099b6ab9abb549de74d2022ef0769 Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Sat, 25 Dec 2021 15:29:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96SimpleQuery,=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=BA=86=E5=80=BC=E4=B8=BA=E7=A9=BA=E7=9A=84=E6=83=85?= =?UTF-8?q?=E5=86=B5,=E5=A4=AA=E7=89=9B=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../extension/toolkit/SimpleQuery.java | 16 ++++++++++++---- .../test/toolkit/SimpleQueryTest.java | 14 +++++--------- 2 files changed, 17 insertions(+), 13 deletions(-) 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 87acf8388..67f7f5866 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 08457a577..9795745d5 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 -- Gitee