为了账号安全,请及时绑定邮箱和手机立即绑定

将数组转换为列表

将数组转换为列表

墨色风雨 2021-09-03 14:36:10
我有一个关于将数组转换为列表的小问题。假设我有一个字符串数组。如果我想把它作为一个列表,我会这样编码:List<String> list = new ArrayList<>(Arrays.asList(stringArray));但是,如果我遇到相同的情况,但我的数组是一个整数数组,我必须以这种方式进行转换:List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList());为什么?.boxed() 和 .collect(Collectors.toList()) 是什么意思?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

Arrays.stream(intArray)返回一个IntStream- 原始整数值元素的序列。现在,如果我们检查javadocs forIntStream我们可以看到没有方法collect接受Collector. 相反,有以下方法

IntStream#collect(Supplier,ObjIntConsumer,BiConsumer)

对此流的元素执行可变的归约操作。

你还可以将你IntStream变成一个List不使用boxed

List<Integer> list = Arrays.stream(intArray)
             .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);

它的工作方式如下:

  • ArrayList::new 是一个供应商——一个创建新结果容器的函数,在我们的例子中是一个新的 ArrayList。

  • ArrayList::add 是一个 ObjIntConsumer - 一个将附加元素添加到结果容器中的函数。

  • ArrayList::addAll是一个 BiConsumer - 一个用于组合两个值的函数。当并行执行流以合并两个部分结果时使用它。在这种情况下,如果流产生 2,ArrayList我们需要将它们合并为一个并继续下一个阶段。

所有这 3 个元素都可以使用collect(Collectors.toList()). 但是为了使用一个Collector原始流IntStream必须转换为更通用的Stream<Integer>。这可以使用boxed()仅执行此转换的方法来完成。

我希望这有帮助。


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信