Java 8 原始流到集合的映射方法

标签 java java-8 integer java-stream

这两种流创建方法之间是否存在显着差异(在性能或最佳实践方面)?

int[] arr2 = {1,2,3,4,5,6};

Arrays.stream(arr2)
      .map((in)->in*2)
      .mapToObj((in) -> new Integer(in))
      .collect(Collectors.toCollection(()-> new ArrayList<>()));

Arrays.stream(arr2)
      .map(in->in*2)
      .boxed()
      .collect(Collectors.toCollection(()-> new ArrayList<>()));

编辑

感谢 Stack Community 的回答,我可以添加一些插件来为新读者提出问题的完整性:

正如许多人指出的那样,.boxed() IntStream 方法定义为:

@Override
    public final Stream<Integer> boxed() {
        return mapToObj(Integer::valueOf);
    }

什么基本上重新定义了以下哪一项更好的问题:

.mapToObj(in -> new Integer(in))

.mapToObj(in -> Integer.valueOf(in))

最佳答案

是的,boxed()使用Integer.valueOf它可以从 cache 检索一些 Integer 实例。

因此,您应该使用带有 boxed() 的版本(最好),或者使用 Integer.valueOf 而不是 new Integer()。请注意,boxed() 实际上是 mapToObj(Integer::valueOf) 的简写。 .

关于Java 8 原始流到集合的映射方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922783/

相关文章:

java - 水平或垂直循环二维数组的效率

java - 使用位运算符比较两个整数

java - Integer.parseInt() 和 Integer.toString() 运行时

java - 使用非递归回溯算法生成迷宫的问题

java - 使用Autowire获取spring xml中配置的sftpChannel

java - 静态或静态最终

java - 如何将军事时间(包括截断的部分时间)解析为时间?

java - postgres 中 "timestamp with time zone"类型的 Jooq 绑定(bind)

java - 可选地获取字段

Java(BlueJ) 将两个整数之间的所有数字相加