クラスObjがあるとします
class Obj{
int field;
}
そして、Obj
インスタンスのリストがあること、つまりList<Obj> lst
。
さて、Java8で、フィルタリング基準(たとえば、オブジェクトの場合、基準は)の下で、field
リスト内のオブジェクトからのintフィールドの値の合計をストリームで見つけるにはどうすればよいですか?lst
o
o.field > 10
回答:
次のcollect
ような適切な合計コレクターを使用することもできますCollectors#summingInt(ToIntFunction)
Collector
入力要素に適用された整数値関数の合計を生成するaを返します。要素が存在しない場合、結果は0になります。
例えば
Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));
getField()メソッドを持つObj
エンティティのJava 8では、field
次のものを使用できます。
List<Obj> objs ...
Stream<Obj> notNullObjs =
objs.stream().filter(obj -> obj.getValue() != null);
Double sum = notNullObjs.mapToDouble(Obj::getField).sum();
Indicator
質問のどこにも言及はなく、すべての答えはすでに非常に具体的です。したがって、回答を編集して目前のトピックに本当に役立つものを追加できない限り、削除することをお勧めします。
int sum = lst.stream().mapToInt(Obj::getField).filter(n -> n > 10).sum();