Nice programing

Java8 : 목록에있는 개체의 특정 필드 값 합계

nicepro 2020. 12. 7. 20:42
반응형

Java8 : 목록에있는 개체의 특정 필드 값 합계


Obj 클래스가 있다고 가정하십시오.

class Obj{

  int field;
}

Obj인스턴스 목록 , 즉 List<Obj> lst.

이제 필터링 기준 (예 : 객체 의 경우 기준은 ) 아래 field목록 lst에있는 객체 의 int 필드 값 합계를 스트림과 함께 Java8에서 어떻게 찾을 수 있습니까?oo.field > 10


넌 할 수있어

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(o -> o.getField()).sum();

또는 (메소드 참조 사용)

int sum = lst.stream().filter(o -> o.getField() > 10).mapToInt(Obj::getField).sum();

다음 collect과 같은 적절한 합산 수집기를 사용할 수도 있습니다.Collectors#summingInt(ToIntFunction)

돌려 Collector정수 값 함수의 합을 생성하는 입력 요소에 적용 하였다. 요소가 없으면 결과는 0입니다.

예를 들면

Stream<Obj> filtered = list.stream().filter(o -> o.field > 10);
int sum = filtered.collect(Collectors.summingInt(o -> o.field));

당신은 시도 할 수 있습니다

int sum = list.stream().filter(o->o.field>10).mapToInt(o->o.field).sum();

여기에 설명 된대로


시험:

int sum = lst.stream().filter(o -> o.field > 10).mapToInt(o -> o.field).sum();

및 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();

참고 URL : https://stackoverflow.com/questions/23110853/java8-sum-values-from-specific-field-of-the-objects-in-a-list

반응형