programing

리스트 내 객체의 특정 필드의 합계 값

sourcetip 2022. 10. 18. 22:49
반응형

리스트 내 객체의 특정 필드의 합계 값

수업이 있다고 가정하다Obj:

class Obj {
  int field;
}

...그리고 당신이 가지고 있는 리스트는Obj예를 들어,List<Obj> lst.

이제 스트림에서 int 필드 값의 합계를 찾으려면 어떻게 해야 합니까?field리스트의 오브젝트로부터lst필터링 기준(예를 들어 객체의 경우)에 따라o기준은 다음과 같습니다.o.field > 10)?

할수있습니다

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

또는 (Method 참조 사용)

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

할 수도 있습니다.collect적절한 합계 수집기를 사용하여

a를 반환한다.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();

Java 8에서는Obj와의 관계.field및 getField() 메서드를 사용할 수 있습니다.

List<Obj> objs ...

Stream<Obj> notNullObjs =
  objs.stream().filter(obj -> obj.getValue() != null);

Double sum = notNullObjs.mapToDouble(Obj::getField).sum();

다음 방법을 사용할 수 있습니다. "IntSummaryStatistics"

IntSummaryStatistics insum = li.stream().filter(v-> v%2==0).mapToInt(mapper->mapper).summaryStatistics();

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

반응형