2015-05-03 47 views
18

toplamı ı arayüzünde altında uygulayan nesnelerin bir listesi var diyelim:Java 8 akışı nesnelerin

public interface Summable<T> { 
    T add(T o1); 
} 

ı da bu nesneleri toplamak yapabiliyor bazı sınıf var diyelim:

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; 
    } 
} 

Java 8 akışlarını kullanarak aynı şeyi nasıl yapabilirim?

Özel Koleksiyoncu etrafında oynuyorum, ancak düzgün bir çözüm bulamadım.

+0

görünüyor >' –

+0

Şart değil, Hesaplama o vardır ve yeterli I varsayalım. –

+0

Soruyla doğrudan alakalı olmayan, ancak örneğinizde 'resultObject' her zaman boş olacaktır. – CKing

cevap

23

Ne var bir reduction geçerli: muhtemelen kamu arayüzü Toplanabirliği `olması gerektiği gibi

return objects.stream().reduce(T::add).orElse(null); 
2
list.stream().reduce(Summable::add); 

interface Summable { 
    Summable add(Summable o1); 
}