【发布时间】:2020-04-05 01:20:30
【问题描述】:
我已将此方法置于循环中,流方法比老式方法慢 3 到 4 倍...
正常吗?
static double sumUtilStream(ArrayList<Toto> stats) { // Return the util of each stats
return stats.stream().mapToDouble(Toto::util).sum(); // That is slow !!!!
}
static double sumUtil(ArrayList<Toto> stats) { // Return the util of each stats
double utils = 0;
for (int i = 0; i < stats.size(); i++) {
utils = utils + stats.get(i).util();
}
return utils;
}
这里是完整的代码测试:
class Toto {
private double util = 0;
public Toto(double value) {
this.util = value;
}
public double util() { return this.util;}
}
class Main {
static double sumUtilStream(ArrayList<Toto> totos) { // Return the util of each stats
return totos.stream().mapToDouble(Toto::util).sum(); // That is slow !!!!
}
static double sumUtil(ArrayList<Toto> totos) { // Return the util of each stats
double utils = 0;
for (int i = 0; i < totos.size(); i++) {
utils = utils + totos.get(i).util();
}
return utils;
}
public static void main(String args[]) {
ArrayList<Toto> totos = new ArrayList<Toto>();
totos.add(new Toto(50));
totos.add(new Toto(50));
totos.add(new Toto(50));
totos.add(new Toto(50));
totos.add(new Toto(50));
for (int i = 0; i < 100000000; i++) {
sumUtil(totos);
}
System.out.println("finish");
}
}
【问题讨论】:
-
是的。流比老式循环慢是正常的。但我也想看看你是如何让你的“慢 3 到 4 倍”的......因为由于基准测试缺陷,你的观察可能不正确。
-
只需将完整的代码放在答案中...
-
... 这意味着本来可能会回答您的问题的人会看到它有答案,然后继续前进。最好仅将“答案”框用于答案。我认为你应该编辑你的问题,在那里添加新信息。
-
我对这个话题的看法与这里无关。请在 Quora ... 或其他讨论论坛上提出类似的问题。 StackOverflow 是一个问答网站,而不是讨论网站。旨在开始讨论或需要基于意见的答案的问题是题外话。
标签: java java-stream