va 16 中新增的 Stream 接口的一些思考

本文探讨了Java 16中Stream API的两个新特性:mapMulti和toList。mapMulti在处理集合类型的场景中提供更优雅的解决方案,避免了多余的遍历和对象创建。而toList方法提供了直接转换为不可变List的功能,相比于collect操作,它更高效且内存占用更小。需要注意,这两个新API在使用时不能直接互相替换,需根据具体需求选择。
摘要由CSDN通过智能技术生成

里先提一个题外话,如果想看 JDK 不同版本之间有何差异,增加或者删除了哪些 API,可以通过下面这个链接查看:

路径中的两个版本就是要对比的两个版本,其界面如下:

同时,我们也可以通过 JDK 内置 jdeps 工具查找过期以及废弃API以及对应的替换

jdeps --jdk-internals -R --class-path 'libs/*' $project

libs是你的所有依赖的目录,$project是你的项目jar包,示例输出:

...
JDK Internal API                         Suggested Replacement
----------------                         ---------------------
sun.misc.BASE64Encoder                   Use java.util.Base64 @since 1.8
sun.reflect.Reflection                   Use java.lang.StackWalker @since 9

Java 16 中针对 Stream API 有两个更新:

给 `va_list` 新增参数,需要先将 `va_list` 对象转换成指向 `va_arg` 函数的指针,然后使用该指针依次获取可变参数列表的参数,并将新参数添加到获取到的参数后面。以下是一个示例代码: ```c #include <stdarg.h> #include <stdio.h> void add_int_to_va_list(va_list *ap, int new_val) { // 获取 va_list 的参数个数 va_list ap_copy; va_copy(ap_copy, *ap); int count = 0; while (va_arg(ap_copy, int)) { count++; } va_end(ap_copy); // 将 va_list 对象转换成指向 va_arg 函数的指针 int *p = va_arg(*ap, int *); // 将新参数添加到获取到的参数后面 p[count] = new_val; } void test(int count, ...) { va_list ap; va_start(ap, count); // 获取 va_list 的参数,存储到数组 int arr[count]; for (int i = 0; i < count; i++) { arr[i] = va_arg(ap, int); } // 新增参数 int new_val = 123; add_int_to_va_list(&ap, new_val); va_end(ap); // 输出参数 for (int i = 0; i < count + 1; i++) { printf("%d ", arr[i]); } printf("\n"); } int main() { test(3, 1, 2, 3); return 0; } ``` 上述代码,`add_int_to_va_list` 函数将 `va_list` 对象转换成指向 `va_arg` 函数的指针,然后获取可变参数列表的参数,并将新参数添加到获取到的参数后面。`test` 函数首先获取 `va_list` 的参数,存储到数组,然后调用 `add_int_to_va_list` 函数新增参数,并输出所有参数。 注意,上述示例代码,`add_int_to_va_list` 函数的第一个参数是指向 `va_list` 对象的指针,因为在 C 语言,函数参数是值传递的,如果直接传递 `va_list` 对象,将会无法修改 `va_list` 对象的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值