feat(stream): 优化 SuperStream 的 toArray 方法实现- 调整 toArray 方法,支持传入 Class 参数以正确创建泛型数组
- 原无参 toArray 方法改为返回 Object[],避免类型转换异常
- 移除对 ForEach 工具类的依赖
- 提升流处理中数组转换的灵活性与安全性

```

```
feat(collection): 改进 toArray 工具方法支持泛型数组创建

- 新增基于 reified 泛型的 toArray 扩展方法,自动推断数组类型
- 添加带 Class 参数的 toArray 重载方法,用于明确指定元素类型
- 处理空列表时直接返回空数组,避免后续操作异常

```

```
build(gradle): 升级 dokka 插件版本并更新项目依赖- 将 org.jetbrains.dokka 插件升级至 2.1.0-Beta 版本
- 添加 jna5.17.0 依赖用于本地库调用支持
- 引入 mybatis-plus-core 3.0.1 编译依赖
- 更新项目版本号从 4.1.7 至 4.1.8

```
This commit is contained in:
Armamem0t 2025-09-21 14:37:22 +08:00
parent 5eed682aa1
commit 683aeb2c7f
Signed by: minglipro
GPG Key ID: 5F355A77B22AA93B
5 changed files with 30 additions and 25 deletions

View File

@ -16,7 +16,7 @@
* ProjectName mingli-utils * ProjectName mingli-utils
* ModuleName mingli-utils * ModuleName mingli-utils
* CurrentFile build.gradle.kts * CurrentFile build.gradle.kts
* LastUpdate 2025-09-20 14:16:07 * LastUpdate 2025-09-20 22:30:57
* UpdateUser MingLiPro * UpdateUser MingLiPro
*/ */
@ -30,7 +30,7 @@ plugins {
`java-library` `java-library`
`maven-publish` `maven-publish`
kotlin("jvm") version "2.2.20" kotlin("jvm") version "2.2.20"
id("org.jetbrains.dokka") version "2.0.0" id("org.jetbrains.dokka") version "2.1.0-Beta"
} }
val GROUPSID = project.properties["GROUPSID"] as String val GROUPSID = project.properties["GROUPSID"] as String
val VERSIONS = project.properties["VERSIONS"] as String val VERSIONS = project.properties["VERSIONS"] as String
@ -77,7 +77,9 @@ dependencies {
compileOnly("com.google.code.gson:gson:2.13.1") compileOnly("com.google.code.gson:gson:2.13.1")
compileOnly("org.mybatis:mybatis:3.5.19") compileOnly("org.mybatis:mybatis:3.5.19")
compileOnly("com.alibaba.fastjson2:fastjson2:2.0.58") compileOnly("com.alibaba.fastjson2:fastjson2:2.0.58")
compileOnly("com.baomidou:mybatis-plus-core:3.0.1") compileOnly("com.baomidou:mybatis-plus-core:3.0.1")
compileOnly("net.java.dev.jna:jna:5.17.0")
} }

View File

@ -16,13 +16,13 @@
# ProjectName mingli-utils # ProjectName mingli-utils
# ModuleName mingli-utils # ModuleName mingli-utils
# CurrentFile gradle.properties # CurrentFile gradle.properties
# LastUpdate 2025-09-20 14:22:07 # LastUpdate 2025-09-20 16:03:35
# UpdateUser MingLiPro # UpdateUser MingLiPro
# #
JDKVERSIONS=1.8 JDKVERSIONS=1.8
GROUPSID=com.mingliqiye.utils GROUPSID=com.mingliqiye.utils
ARTIFACTID=mingli-utils ARTIFACTID=mingli-utils
VERSIONS=4.1.7 VERSIONS=4.1.8
signing.keyId=B22AA93B signing.keyId=B22AA93B
signing.password= signing.password=
signing.secretKeyRingFile=secret.gpg signing.secretKeyRingFile=secret.gpg

View File

@ -16,14 +16,13 @@
* ProjectName mingli-utils * ProjectName mingli-utils
* ModuleName mingli-utils.main * ModuleName mingli-utils.main
* CurrentFile SuperStream.java * CurrentFile SuperStream.java
* LastUpdate 2025-09-20 13:24:35 * LastUpdate 2025-09-21 14:22:13
* UpdateUser MingLiPro * UpdateUser MingLiPro
*/ */
package com.mingliqiye.utils.stream; package com.mingliqiye.utils.stream;
import com.mingliqiye.utils.collection.Collections; import com.mingliqiye.utils.collection.Collections;
import com.mingliqiye.utils.foreach.ForEach;
import com.mingliqiye.utils.functions.P1Function; import com.mingliqiye.utils.functions.P1Function;
import com.mingliqiye.utils.functions.P2Function; import com.mingliqiye.utils.functions.P2Function;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -887,16 +886,13 @@ public class SuperStream<T> implements Stream<T> {
*/ */
@NotNull @NotNull
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public T[] toArray() { public T[] toArray(Class<T> clazz) {
List<T> list = toAList(); return stream.toArray(i -> (T[]) Array.newInstance(clazz, i));
if (list.isEmpty()) {
throw new StreamEmptyException("Stream is empty");
} }
T[] items = (T[]) Array.newInstance(list.get(0).getClass(), list.size());
ForEach.forEach(list, (v, i) -> { @NotNull
items[i] = v; public Object[] toArray() {
}); return stream.toArray();
return items;
} }
/** /**

View File

@ -16,7 +16,7 @@
* ProjectName mingli-utils * ProjectName mingli-utils
* ModuleName mingli-utils.main * ModuleName mingli-utils.main
* CurrentFile Collection.kt * CurrentFile Collection.kt
* LastUpdate 2025-09-20 14:03:46 * LastUpdate 2025-09-21 14:36:57
* UpdateUser MingLiPro * UpdateUser MingLiPro
*/ */
@ -980,7 +980,14 @@ fun toArray(list: List<Char>): CharArray {
* @param list 输入的 List * @param list 输入的 List
* @return 转换后的数组 * @return 转换后的数组
*/ */
fun <T> toArray(list: List<T>): Array<T> { inline fun <reified T> toArray(list: List<T>): Array<T> {
if (list.isEmpty())
return arrayOf<T>()
return SuperStream.of<T>(list) return SuperStream.of<T>(list)
.toArray() .toArray(T::class.java)
}
fun <T> toArray(list: List<T>, clazz: Class<T>): Array<T> {
return SuperStream.of<T>(list)
.toArray(clazz)
} }

View File

@ -16,7 +16,7 @@
* ProjectName mingli-utils * ProjectName mingli-utils
* ModuleName mingli-utils.main * ModuleName mingli-utils.main
* CurrentFile IO.kt * CurrentFile IO.kt
* LastUpdate 2025-09-20 11:46:19 * LastUpdate 2025-09-20 16:03:14
* UpdateUser MingLiPro * UpdateUser MingLiPro
*/ */
@ -33,22 +33,22 @@ class IO {
@JvmStatic @JvmStatic
fun print(vararg args: Any?) { fun print(vararg args: Any?) {
print(" ", *args) printA(" ", *args)
} }
@JvmStatic @JvmStatic
fun println(vararg args: Any?) { fun println(vararg args: Any?) {
println(" ", *args) printlnA(" ", *args)
} }
@JvmStatic @JvmStatic
fun println(sp: String = " ", vararg args: Any?) { fun printlnA(sp: String, vararg args: Any?) {
print(" ", *args) printA(" ", *args)
kotlin.io.println() kotlin.io.println()
} }
@JvmStatic @JvmStatic
fun print(sp: String = " ", vararg args: Any?) { fun printA(sp: String = "", vararg args: Any?) {
if (args.isEmpty()) { if (args.isEmpty()) {
kotlin.io.println() kotlin.io.println()
} }