From bc8e9cd1597a54150153fb988dd8a9730e819a6c Mon Sep 17 00:00:00 2001 From: VampireAchao Date: Thu, 9 Dec 2021 20:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9ECollStreamUtil.groupKeyValue(?= =?UTF-8?q?java.util.Collection,=20java.util.function.Function,=20?= =?UTF-8?q?java.util.function.Function)=EF=BC=8C=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=88=86=E7=BB=84=E6=97=B6=E7=9B=B4=E6=8E=A5=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/collection/CollStreamUtil.java | 41 ++++++++++++++++++- .../core/collection/CollStreamUtilTest.java | 20 +++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java index f4ef337eb..09b0257ab 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollStreamUtil.java @@ -13,7 +13,7 @@ import java.util.stream.Collectors; /** * 集合的stream操作封装 * - * @author 528910437@QQ.COM + * @author 528910437@QQ.COM VampireAchao * @since 5.5.2 */ public class CollStreamUtil { @@ -195,6 +195,45 @@ public class CollStreamUtil { .collect(Collectors.groupingBy(key1, Collectors.toMap(key2, Function.identity(), (l, r) -> l))); } + /** + * 将collection按照规则(比如有相同的班级id)分类成map,map中的key为班级id,value为班级名
+ * {@code Collection -------> Map> } + * + * @param collection 需要分类的集合 + * @param key 分类的规则 + * @param value 分类的规则 + * @param collection中的泛型 + * @param map中的key类型 + * @param List中的value类型 + * @return 分类后的map + */ + public static Map> groupKeyValue(Collection collection, Function key, + Function value) { + return groupKeyValue(collection, key, value, false); + } + + /** + * 将collection按照规则(比如有相同的班级id)分类成map,map中的key为班级id,value为班级名
+ * {@code Collection -------> Map> } + * + * @param collection 需要分类的集合 + * @param key 分类的规则 + * @param value 分类的规则 + * @param isParallel 是否并行流 + * @param collection中的泛型 + * @param map中的key类型 + * @param List中的value类型 + * @return 分类后的map + */ + public static Map> groupKeyValue(Collection collection, Function key, + Function value, boolean isParallel) { + if (CollUtil.isEmpty(collection)) { + return Collections.emptyMap(); + } + return StreamUtil.of(collection, isParallel) + .collect(Collectors.groupingBy(key, Collectors.mapping(value, Collectors.toList()))); + } + /** * 将collection转化为List集合,但是两者的泛型不同
* {@code Collection ------> List } diff --git a/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java index d5c7df566..f83f82d7f 100644 --- a/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/collection/CollStreamUtilTest.java @@ -149,6 +149,26 @@ public class CollStreamUtilTest { } + @Test + public void testGroupKeyValue() { + Map> map = CollStreamUtil.groupKeyValue(null, Student::getTermId, Student::getClassId); + Assert.assertEquals(map, Collections.EMPTY_MAP); + + List list = new ArrayList<>(); + map = CollStreamUtil.groupKeyValue(list, Student::getTermId, Student::getClassId); + Assert.assertEquals(map, Collections.EMPTY_MAP); + list.add(new Student(1, 1, 1, "张三")); + list.add(new Student(1, 2, 1, "李四")); + list.add(new Student(2, 2, 1, "王五")); + map = CollStreamUtil.groupKeyValue(list, Student::getTermId, Student::getClassId); + + Map> compare = new HashMap<>(); + compare.put(1L, Arrays.asList(1L, 2L)); + compare.put(2L, Collections.singletonList(2L)); + Assert.assertEquals(compare, map); + } + + @Test public void testTranslate2List() { List list = CollStreamUtil.toList(null, Student::getName);