当前位置: 首页 > 知识库问答 >
问题:

在流的.collect中指定集合大小是否提高了性能?

穆正祥
2023-03-14

我应该更喜欢

List<?> tableList = list.stream()
                .map(row -> getRowModified(row, activeLimits))
                .collect(Collectors.toCollection(() -> new ArrayList<>(previouslyDefinedListSize)));

而不是

List<?> tableList = list.stream()
                .map(row -> getRowModified(row, activeLimits))
                .collect(Collectors.toList());

在业绩收益方面?

共有1个答案

谭刚毅
2023-03-14

首先,如果我们看到代码,collectors.toCollection(()->new ArrayList<>(previouslyDefinedListSize)应该更快(理论上),这是因为

  public static <T> Collector<T, ?, List<T>> toList() {
    return new Collectors.CollectorImpl(
        ArrayList::new, // here we create ArrayList with 10 elements
        List::add, // here we recreate array in ArrayList when we don't have enougth capacity
        (var0, var1) -> { // and here two
            var0.addAll(var1);
            return var0;
        }, CH_ID);
  }

其次,我不确定它在大多数情况下有这么大的差别,但是collectors.toList()是一个相当容易阅读的工具,而collectors.toCollection(()->new ArrayList<>(previouslyDefinedListSize),所以在我看来,最好创建性能测试并检查它是否对应用程序很重要。

 类似资料:
  • 在我的ASP. net网站,我有一个连接到SQL服务器快速数据库。有时候我确实会犯很多错误,比如 系统。异常:超时已过期。从池中获取连接之前的超时时间。这可能是因为所有池连接都在使用中,并且达到了最大池大小。 搜索错误后,我发现可能是由于SQL Server连接未关闭。但是我已经正确地使用了SQL Server连接,并且正确地处理了它。我已使用using语句处理连接。在我的应用程序中,我在一天中的

  • 我是Java编程的新手,对IO API感到困惑。对于系统API,读/写整个块比随机字节更快。Java能实现这个特性吗?或者如何在Java IO期间优化性能?我很感激你的任何评论,非常感谢!

  • 我正在使用ignite2.6,其中有数据流节点,从kafka消耗数据并放入Ignite缓存。服务器平均负载较高,吞吐量降低。 我已经尝试为缓存中定义的索引内联设置索引大小,这样可以提供良好的性能,但也增加了服务器内存利用率和较高的平均负载。请说明在这种情况下增加datastreamer线程池大小会产生什么影响。

  • 问题内容: Scala的集合提供了一个名为方法是合并和成一个单一的方法。在筛选集合以产生仅包含特定类型的该集合的子集时,此功能特别有用。 Java 8的Stream是否有这样的事情? 问题答案: 考虑到Java的类型系统,在一个步骤中组合使用和并没有多大用处。例如,没有这种类型。 最接近的是: 但表现力 不比 当然,您可以创建一个辅助方法,将这些步骤封装在一个不可分解的操作中: 那么你可以像这样使

  • 我正在使用OpenAPI/Swagger来指定我的API。 有一件事我找不到,那就是如何指定一个集合。 我正在使用https://editor.swagger.io/我输入了整个API。对于要指定为集的属性,我编写了以下代码: 我本以为uniqueItems会起作用并生成一个Set,但事实并非如此。相反,生成了以下代码: 有没有办法生成类似 而是? 我在SO中找到了一个可能的解决方案,但这需要在p

  • 问题内容: 比如有收藏,,。任何避免迭代器循环的方法都可以通过Java 8流API交错这些集合以获得以下结果- 吗? 问题答案: 我不确定Stream API是否有更简单的方法,但是您可以在所有列表的索引上使用流来考虑以下问题: 这将获得给定列表中最大列表的大小。然后,对于每个索引,它使用该列表中每个列表的元素在该索引处形成的流(如果该元素存在的话)进行平面映射。 然后,您可以将其与 使用prot