当前位置: 首页 > 面试题库 >

Java 8基本流到集合的映射方法

仲孙夕
2023-03-14
问题内容

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

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.valueOfInteger

因此,您应该将该版本与boxed()(最好使用)一起使用,或者使用Integer.valueOf代替new Integer()。请注意,boxed()实际上这是的简写mapToObj(Integer::valueOf)



 类似资料:
  • 假设我有一张房间清单 每个房间都有一份人员名单。 使用java8 streams,我想迭代房间列表,获取所有人员,在每个节点上执行一些方法(doSomething()),并获取所有过滤对象的列表。 这是使用java 8的最佳实践吗?

  • 我正在从文件中读取值并获取列表。如下- 一旦我得到这个

  • 假设我有以下工作的lambda表达式: 我想在过滤器语句之前创建一个具有2个值的流。所以我想做一个映射,但仍然保留原始值。我想实现这样的事情: 这可能与Java8流?我已经看了收集(GroupingBy()),但仍然没有成功。

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法

  • 如果说Vimscript有一个特性使得你能够按照你的意愿定制Vim,那就非键盘映射莫属。 你可以通过键盘映射告诉Vim: 当我按下这个键时,我需要你放弃默认操作,按我的想法做。 我们先从normal模式的键盘映射开始。我们将在下一章节讨论insert模式和其他模式下的 键盘映射。 随意在文本中敲写几行文字,然后运行命令: :::vim :map - x 将光标置于文本中的某处,按下-。注意Vim

  • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。