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

优化java 8流操作

唐俊英
2023-03-14
    public List<String> getProdutosMaisCompradosQuantidade(int filial, int X){
    Map<String, ProdutoFilial> aux;

    if(filial==0) {
        aux = new HashMap<>(ValoresFixos.CATALOGO_PRODUTOS_TAMANHO_INICIAL);
        filiais.stream()
               .forEach( (f) -> {
                    Map<String, ProdutoFilial> aux2 = f.getMapProdutosDadosFilialSemEncapsulamento();
                    aux2.forEach((k,t) -> {
                            if(t.getQuantidade()>0){
                                if(aux.containsKey(k)) aux.get(k).atualizarValores(t);
                                else aux.put(k,t);
                            }
                    });
                });
    }
    else aux = filiais.get(filial-1).getMapProdutosDadosFilialSemEncapsulamento();

    List<String> list = 
       aux
       .entrySet()
       .stream()
       .sorted(new ComparadorProdutoQuantidade())
       .map(e -> e.getKey()+"\n     |   o Quantidade: "+e.getValue().getQuantidade()+"; Comprado por "+e.getValue().getNumeroCompradores()+" Clientes Distintos")
       .collect(Collectors.toList());

    if(X>list.size()) X = list.size();
    list.subList(X, list.size()).clear();

    return list;

}

我在这里使用的所有方法几乎都是O(1)复杂度,比较器也不太费力,所以这不应该是问题,有什么我可能不知道的东西可以帮助我优化这个流操作吗?也许我用的入口集可以避免...?因为这可能是这里最贵的手术...

编辑1:也许我应该解释一下这个方法背后的想法。它的主要目的是对地图aux进行排序,并返回一个带有排序键的列表(键也被修改了,但这不是主要目的)

共有1个答案

颜德馨
2023-03-14

您可以尝试用mapcollect替换foreach语句,如Java8中所述--转换列表的最佳方式:map还是foreach?

然后,您可以尝试使用并行流是否可以提高性能。

可以用流API替换创建aux映射的语句(使用collectors.tomap和/或collectors.groupingby)。这被认为比使用foreach更干净,后者使用有状态操作。

 类似资料:
  • 本文向大家介绍浅谈java8 stream flatMap流的扁平化操作,包括了浅谈java8 stream flatMap流的扁平化操作的使用技巧和注意事项,需要的朋友参考一下 概念: Steam 是Java8 提出的一个新概念,不是输入输出的 Stream 流,而是一种用函数式编程方式在集合类上进行复杂操作的工具。简而言之,是以内部迭代的方式处理集合数据的操作,内部迭代可以将更多的控制权交给集

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

  • 有许多java第三方库可用于在Java集合中提供高性能。根据这篇DZONE文章,有一些本机库遵循OSGI模型,并在Java集合中提供高性能,或者还执行一些其他操作。现在在中启动了以在集合库中提供良好的性能,我们还使用执行一些并行操作。现在,以下是我的问题: Java Streams的性能是否比第三方库(,等)更好。 是否可以将与其他集合库一起使用?

  • 问题内容: 我想知道以下脚本是否可以某种方式进行优化。它确实在磁盘上写了很多东西,因为它可能删除了最新的行并重新插入它们。我正在考虑应用“在重复键更新中插入…”之类的东西,并发现了单行更新的一些可能性,但我不知道如何在的上下文中应用它。 编辑: 的架构,,,:http://pastebin.com/3tRVPPVi。 要点是更新列和中的内容。表上有一个触发器,可根据这些列设置列的值。 in是表中的

  • 18.5. 优化列表操作 Soundex 算法的第三步是去除连续重复字符。 怎样做是最佳方法? 这里是我们目前在 soundex/stage2/soundex2c.py 中的代码: digits2 = digits[0] for d in digits[1:]: if digits2[-1] != d: digits2 += d 这里是