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

Java 8-转换列表的最佳方法:map或foreach?

仉昱
2023-03-14
问题内容

我有一个列表myListToParse,我想在其中过滤元素并在每个元素上应用一个方法,然后将结果添加到另一个列表中myFinalList

使用Java 8,我注意到可以用2种不同的方式来做到这一点。我想知道它们之间更有效的方法,并理解为什么一种方法比另一种更好。

我愿意就第三种方式提出任何建议。

方法1:

myFinalList = new ArrayList<>();
myListToParse.stream()
        .filter(elt -> elt != null)
        .forEach(elt -> myFinalList.add(doSomething(elt)));

方法2:

myFinalList = myListToParse.stream()
        .filter(elt -> elt != null)
        .map(elt -> doSomething(elt))
        .collect(Collectors.toList());

问题答案:

不必担心任何性能差异,在这种情况下,通常它们会很小。

方法2是可取的,因为

  1. 它不需要变异lambda表达式之外的集合,

  2. 它更具可读性,因为在收集管道中执行的不同步骤是顺序编写的:首先执行过滤操作,然后执行map操作,然后收集结果(有关收集管道的好处的更多信息,请参阅Martin Fowler的出色文章),

  3. 您可以通过替换Collector使用的值轻松更改收集值的方式。在某些情况下,您可能需要编写自己的Collector,但是这样做的好处是您可以轻松地重用它。



 类似资料:
  • 我有一个列表,我希望在其中筛选元素并对每个元素应用一个方法,然后将结果添加到另一个列表中。 在Java8中,我注意到我可以用两种不同的方法来实现它。我想知道它们之间更有效率的方式,并理解为什么一种方式比另一种方式更好。 我愿意接受任何关于第三条路的建议。 方法二:

  • 我尝试了这种方法,但得到了强制转换异常,不能将字符串转换为整数。

  • 从Java 8开始,所以需要一点时间来适应它。这是一个经典的问题,我有一个想要转换的对象数组。 在Java8之前,理想的代码是(没有空指针): Java8中最好的版本是什么?

  • 问题内容: 将列表/元组转换为dict的最佳方法是什么,其中键是列表的不同值,而值是这些不同值的频率? 换一种说法: (我不得不多次执行上述操作,标准库中是否有适合您的内容?) 编辑: Jacob Gabrielson指出2.7 / 3.1分支的标准库中有一些内容 问题答案: 有点儿 通常效果很好。

  • 问题内容: 据我所知,在python中,至少有3到4种方法可以创建和初始化给定大小的列表: 简单循环: 简单循环: 清单理解: 列表和整数乘法: 在这些示例中,考虑到列表仅包含50个元素,我认为不会有任何性能差异,但是如果我需要一百万个元素的列表怎么办?使用make会有所改善吗?在python中创建和初始化列表的首选/最快方法是哪种? 问题答案: 让我们使用进行一些时间测试* : 从上面可以看到,

  • 我必须以JSON格式转换数据表单以发送到webAPI。 我有一个从第1页调用的弹出表单: 第1页有以下代码: 输出JSON不正确。代码返回如下字符串: ! DOCTYPE html 什么是最好的方法来字符串化输入数据?我哪里错了?