在Java 8中,如果我有一个像这样的对象列表:
MyObject
double a;
double b;
double c;
Run Code Online (Sandbox Code Playgroud)
我想在对象列表中获取每个字段的总数.我能做到的一种方法如下:
double totalA = myListOfObjects.stream().map(e -> e.getA()).reduce(0.0, (x, y) -> x + y);
double totalB = myListOfObjects.stream().map(e -> e.getB()).reduce(0.0, (x, y) -> x + y);
double totalC = myListOfObjects.stream().map(e -> e.getC()).reduce(0.0, (x, y) -> x + y);
Run Code Online (Sandbox Code Playgroud)
但是有没有把它组合成一个通过使用流api的对象列表?如果我只是写了一个for/while循环(见下文)并手动累加了3个总数,那么看起来比上面3行代码更有效率)
for (MyObject obj: myListOfObjects) {
totalA += obj.getA();
totalB += obj.getB();
totalC += obj.getC();
}
Run Code Online (Sandbox Code Playgroud)
谢谢
你可以减少MyObject
像这样的新对象:
MyObject totals = myListOfObjects.stream()
.reduce((x, y) -> new MyObject(
x.getA() + y.getA(),
x.getB() + y.getB(),
x.getC() + y.getC()
))
.orElse(new MyObject(0, 0, 0));
totalA = totals.getA();
totalB = totals.getB();
totalC = totals.getC();
Run Code Online (Sandbox Code Playgroud)
无论如何,我认为你不应该担心这里的表现.所有三个解决方案(在你的问题中都有2个以上)我的O(n)
时间复杂度都很高 我建议做一些关于过早优化的阅读.只需找到最易读且最容易理解的代码.
归档时间: |
|
查看次数: |
1986 次 |
最近记录: |