diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java index a1e1dcce3..04df601b9 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/FastStream.java @@ -522,7 +522,7 @@ public class FastStream implements Stream, Iterable { * 这是一个无状态中间操作 * * @param action 指定的函数 - * @return 返回叠加操作后的Steam + * @return 返回叠加操作后的FastStream * @apiNote 该方法存在的意义主要是用来调试 * 当你需要查看经过操作管道某处的元素,可以执行以下操作: *
{@code
@@ -542,7 +542,7 @@ public class FastStream implements Stream, Iterable {
 	/**
 	 * 返回叠加调用{@link Console#log(Object)}打印出结果的流
 	 *
-	 * @return 返回叠加操作后的Steam
+	 * @return 返回叠加操作后的FastStream
 	 */
 	public FastStream log() {
 		return peek(Console::log);
@@ -1309,6 +1309,31 @@ public class FastStream implements Stream, Iterable {
 		return FastStream.of(list);
 	}
 
+	/**
+	 * 按指定长度切分为双层流
+	 *
+	 * @param batchSize 指定长度
+	 * @return 切好的流
+	 */
+	public FastStream> sub(int batchSize) {
+		List list = toList();
+		if (list.size() <= batchSize) {
+			return FastStream.>of(FastStream.of(list)).parallel(isParallel());
+		}
+		return FastStream.iterate(0, i -> i < list.size(), i -> i + batchSize)
+				.map(skip -> FastStream.of(list).skip(skip).limit(batchSize)).parallel(isParallel());
+	}
+
+	/**
+	 * 按指定长度切分为元素为list的流
+	 *
+	 * @param batchSize 指定长度
+	 * @return 切好的流
+	 */
+	public FastStream> subList(int batchSize) {
+		return sub(batchSize).map(FastStream::toList);
+	}
+
 	public interface FastStreamBuilder extends Consumer, cn.hutool.core.builder.Builder> {
 
 		/**
diff --git a/hutool-core/src/test/java/cn/hutool/core/stream/FastStreamTest.java b/hutool-core/src/test/java/cn/hutool/core/stream/FastStreamTest.java
index 204fc0230..18dfd1380 100644
--- a/hutool-core/src/test/java/cn/hutool/core/stream/FastStreamTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/stream/FastStreamTest.java
@@ -268,4 +268,24 @@ public class FastStreamTest {
 		List zip = FastStream.of(orders).zip(list, (e1, e2) -> e1 + "." + e2).toList();
 		Assert.assertEquals(Arrays.asList("1.dromara", "2.hutool", "3.sweet"), zip);
 	}
+
+	@Test
+	void testSub() {
+		List list = Arrays.asList(1, 2, 3, 4, 5);
+		List> lists = FastStream.of(list).sub(2).map(FastStream::toList).toList();
+		Assert.assertEquals(Arrays.asList(Arrays.asList(1, 2),
+				Arrays.asList(3, 4),
+				singletonList(5)
+		), lists);
+	}
+
+	@Test
+	void testSubList() {
+		List list = Arrays.asList(1, 2, 3, 4, 5);
+		List> lists = FastStream.of(list).subList(2).toList();
+		Assert.assertEquals(Arrays.asList(Arrays.asList(1, 2),
+				Arrays.asList(3, 4),
+				singletonList(5)
+		), lists);
+	}
 }