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进行排序,并返回一个带有排序键的列表(键也被修改了,但这不是主要目的)
您可以尝试用map
和collect
替换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 这里是