将数组转换为列表

我有一个关于将数组转换为列表的小问题。假设我有一个字符串数组。如果我想把它作为一个列表,我会这样编码:

List<String> list = new ArrayList<>(Arrays.asList(stringArray));

但是,如果我遇到相同的情况,但我的数组是一个整数数组,我必须以这种方式进行转换:

List<Integer> list = Arrays.stream(intArray).boxed().collect(Collectors.toList());

为什么?.boxed() 和 .collect(Collectors.toList()) 是什么意思?


墨色风雨
浏览 210回答 3
3回答

慕虎7371278

Arrays.stream(intArray)返回一个IntStream- 原始整数值元素的序列。现在,如果我们检查javadocs&nbsp;forIntStream我们可以看到没有方法collect接受Collector.&nbsp;相反,有以下方法:IntStream#collect(Supplier,ObjIntConsumer,BiConsumer)对此流的元素执行可变的归约操作。你还可以将你IntStream变成一个List不使用boxed。List<Integer>&nbsp;list&nbsp;=&nbsp;Arrays.stream(intArray) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.collect(ArrayList::new,&nbsp;ArrayList::add,&nbsp;ArrayList::addAll);它的工作方式如下:ArrayList::new&nbsp;是一个供应商——一个创建新结果容器的函数,在我们的例子中是一个新的 ArrayList。ArrayList::add&nbsp;是一个 ObjIntConsumer - 一个将附加元素添加到结果容器中的函数。ArrayList::addAll是一个 BiConsumer - 一个用于组合两个值的函数。当并行执行流以合并两个部分结果时使用它。在这种情况下,如果流产生 2,ArrayList我们需要将它们合并为一个并继续下一个阶段。所有这 3 个元素都可以使用collect(Collectors.toList()).&nbsp;但是为了使用一个Collector原始流IntStream必须转换为更通用的Stream<Integer>。这可以使用boxed()仅执行此转换的方法来完成。我希望这有帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java