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 2f350e400..5f6970673 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 @@ -20,7 +20,7 @@ import java.util.stream.Collectors; /** * 集合的stream操作封装 * - * @author 528910437@QQ.COM + * @author 528910437@QQ.COM VampireAchao * @since 5.5.2 */ public class CollStreamUtil { @@ -202,6 +202,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);