Java8流-对象的总和
假设我有一个实现以下接口的对象列表:Java8流-对象的总和,java,java-8,java-stream,Java,Java 8,Java Stream,假设我有一个实现以下接口的对象列表: public interface Summable<T> { T add(T o1); } 公共接口可求和{ T加(to1); } 假设我还有一个类,它可以对这些对象求和: public class Calculator<T extends Summable<T>> { public T sum(final List<T> objects) { if (null == obj
public interface Summable<T> {
T add(T o1);
}
公共接口可求和{
T加(to1);
}
假设我还有一个类,它可以对这些对象求和:
public class Calculator<T extends Summable<T>> {
public T sum(final List<T> objects) {
if (null == objects) {
throw new IllegalArgumentException("Ups, list of objects cannot be null!");
}
T resultObject = null;
for (T object : objects) {
resultObject = object.add(resultObject);
}
return resultObject;
}
}
公共类计算器{
公共T总和(最终列表对象){
if(null==对象){
抛出新的IllegalArgumentException(“Ups,对象列表不能为null!”);
}
T resultObject=null;
对于(T对象:对象){
resultObject=object.add(resultObject);
}
返回结果对象;
}
}
如何使用Java8流实现同样的功能
我正在玩一个定制的收集器,但找不到一个简洁的解决方案。您拥有的是:
它看起来应该是
公共接口可求和的
不一定,Calculator有它,我想这就足够了。与问题没有直接关系,但在您的示例中,resultObject
将始终为空。仅在第一次迭代中,但有什么意义?你知道我怎么写吗?
return objects.stream().reduce(T::add).orElse(null);
list.stream().reduce(Summable::add);
interface Summable {
Summable add(Summable o1);
}