본문으로 건너뛰기

스트림 기본연습2

저번시간에 이어서 오늘은 스트림을 이용해서 연산을 해보자

멤버의 레벨과 가격을 추가했다
private Integer memberLevel;
private BigDecimal price;


@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Member {

private Integer id;

private String name;

private Integer age;

private String gender;

private String location;

private Integer memberLevel;

private BigDecimal price;

public static List<Member> getMembersList() {

return Arrays.asList(
new Member(1, "cavin", 15, "male", "Tokyo", 5, new BigDecimal("110.1548")),
new Member(2, "james", 21, "male", "Seoul", 5, new BigDecimal("110.1548")),
new Member(3, "lucy", 33, "female", "Pusan", 5, new BigDecimal("110.1548")),
new Member(4, "bob", 25, "male", "Tokyo", 4, new BigDecimal("110.1548")),
new Member(5, "david", 40, "male", "Tokyo", 4, new BigDecimal("110.1548")),
new Member(6, "susan", 65, "female", "Seoul", 2, new BigDecimal("110.1548")),
new Member(7, "cherky", 7, "male", "Seoul", 1, new BigDecimal("110.1548")),
new Member(8, "keeth", 12, "male", "Seoul", 3, new BigDecimal("110.1548")),
new Member(9, "can", 11, "female", "Seoul", 3, new BigDecimal("110.1548")),
new Member(10, "mantis", 25, "male", "Tokyo", 1, new BigDecimal("110.1548")),
new Member(11, "jenkins", 34, "male", "Seoul", 1, new BigDecimal("110.1548"))
);
}

}

public class App {
public static void main(String[] args) {

// 멤버의 나이 총합(Integer)을 구해보자
// 구하고싶은것을 map으로 먼저 빼놓고, 그것을 Integer메서드 레퍼런스의 sum메서드로 결과값을 반환한다.
Integer sumAge = Member.getMembersList().stream()
.map(Member::getAge)
.reduce(0, Integer::sum);
System.out.println("멤버의 나이 총합");
System.out.println(sumAge);

// Optional 멤버의 나이 총합(Integer)을 구해보자
// 구하고싶은것을 map으로 먼저 빼놓고, 그것을 Integer메서드 레퍼런스의 sum메서드로 결과값을 반환한다.
Optional<Integer> optionalSumAge = Optional.ofNullable(Member.getMembersList().stream()
.map(Member::getAge)
.reduce(0, Integer::sum));
System.out.println("멤버의 나이 총합");
System.out.println(optionalSumAge.get());


// 멤버의 가격의 총합
// 구하고싶은것을 map으로 먼저 빼놓고, 그것을 BigDecimal메서드 레퍼런스의 add메서드로 결과값을 반환한다.
BigDecimal sumMemberPrice = Member.getMembersList().stream()
.map(Member::getPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println("멤버의 가격 총합");
System.out.println(sumMemberPrice);

// Optional 멤버의 가격의 총합
// 구하고싶은것을 map으로 먼저 빼놓고, 그것을 BigDecimal메서드 레퍼런스의 add메서드로 결과값을 반환한다.
Optional<BigDecimal> optionalSumMemberPrice = Optional.ofNullable(Member.getMembersList().stream()
.map(Member::getPrice)
.reduce(BigDecimal.ZERO, BigDecimal::add));
System.out.println("멤버의 가격 총합");
System.out.println(optionalSumMemberPrice.get());
}
}