JAVA

[Java | Stream] 자바 스트림 filter, 합계 (Sum) , List 출력하기 예제

엘라 ELLA 2022. 12. 23. 13:00
728x90
반응형

 

 

게시글이 도움이 되었다면

[로그인]이 필요 없는 ❤ 클릭과

게시글의 광고를 클릭 해 주세요:)

 

자바에서 스트림 Sum, filter , List 출력하기 예제

 

문제풀이를 위한 제시된 코드 전체

 

Main.java

package org.example.p1;

import java.util.Arrays;
import java.util.List;

public class Main {

    public static void main(String[] args) {
        List<Money> money = Arrays.asList(
                new Money("백원", 100, "이순신"),
                new Money("천원", 1_000, "퇴계 이황"),
                new Money("오천원", 5_000, "율곡 이이"),
                new Money("만원", 10_000, "세종대왕"),
                new Money("오만원", 50_000, "신사임당")
                );


        // < 문제 1 >
        // stream 을 이용하여 amount의 합계 구하기
        // sum() 사용
        // 구현(1줄)

        int total = 0;
//        total = money.stream()

        // end of 구현
        // 출력값 : 66100
        System.out.println(total);

        // < 문제 2 >
        // stream을 이용하여 amount의 값이 50000인 인물을 구한다.
        // filter 사용
        // 구현

        String person = "";
//        person = money.stream()

        // end of 구현
        // 출력값 : 신사임당
        System.out.println(person);



        // < 문제 3 >
        // stream을 이용하여 돈의 이름(100월, 1000원, ..., 50000원)을 List로 모은다.
        // 마지막에 collect(Collectors.toList()) 사용
        // 구현

        List<String> names = null;
//        names = money.stream()


        // end of 구현
        // 출력값 :
        // 백원
        // 천원
        // 오천원
        // 만원
        // 오만원
        if(names != null){
            names.forEach(System.out::println);
        }
    }

}

 

Money.java

 

package org.example.p1;

public class Money {
    private String name;
    private int amount;
    private String person;

    public Money(String name, int amount, String person) {
        this.name = name;
        this.amount = amount;
        this.person = person;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }

    public String getPerson() {
        return person;
    }

    public void setPerson(String person) {
        this.person = person;
    }

    @Override
    public String toString() {
        return "Money{" +
                "name='" + name + '\'' +
                ", amount=" + amount +
                ", person='" + person + '\'' +
                '}';
    }
}

 


 

Stream에서 Sum 이용하여 합계 구하기

 

<문제1>
stream을 이용하여 amount의 합계 구하기

 

풀이 코드

int total = 0;
total = money.stream()
        .mapToInt(Money::getAmount)
        .sum();
    
    
System.out.println("total");
System.out.println(total);

 

결과

total
66100

 


 

Stream에서 filter 이용하여 원하는 값 출력하기

 

< 문제 2 >
stream을 이용하여 amount의 값이 50000인 인물을 구한다

 

 

풀이코드

String name = money.stream()
        .filter(p -> p.getAmount() >= 50_000)
        .map(p -> {
            String pPerson = p.getPerson();
            return pPerson;
        })
        .findFirst().get();

System.out.println(name);

 

결과값

신사임당

 

 


 

Stream에서 List 이용하여 해당 값 출력하기

 

< 문제 3 >
stream을 이용하여 돈의 이름(100월, 1000원, ..., 50000원)을 List로 모은다.
마지막에 collect(Collectors.toList()) 사용해서 List를 출력

 

 

풀이코드

List<String> names = null;
names = money.stream()
        .map(n -> n.getName())
        .collect(Collectors.toList());


if(names != null){
    names.forEach(System.out::println);
}

 

결과

백원
천원
오천원
만원
오만원

 


 

풀이 전체 코드

 

package org.example.p1;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) {
        List<Money> money = Arrays.asList(
                new Money("백원", 100, "이순신"),
                new Money("천원", 1_000, "퇴계 이황"),
                new Money("오천원", 5_000, "율곡 이이"),
                new Money("만원", 10_000, "세종대왕"),
                new Money("오만원", 50_000, "신사임당")
                );


        // < 문제 1 >
        // stream 을 이용하여 amount의 합계 구하기
        // sum() 사용

        int total = 0;
        total = money.stream()
                .mapToInt(Money::getAmount)
                .sum();

        // 출력값 : 66100
        System.out.println("total");
        System.out.println(total);

        // < 문제 2 >
        // stream을 이용하여 amount의 값이 50000인 인물을 구한다.
        // filter 사용

        String person = "";

        Stream<String> _stringStream = money.stream()
                .filter(p -> p.getAmount() >= 5_000)
               .map(p -> "(조선) " + p.getPerson());

        String name = money.stream()
                .filter(p -> p.getAmount() >= 50_000)
                .map(p -> {
                    String pPerson = p.getPerson();
                    return pPerson;
                })
                .findFirst().get();

        System.out.println(name);

        // 출력값 : 신사임당


        // < 문제 3 >
        // stream을 이용하여 돈의 이름(100월, 1000원, ..., 50000원)을 List로 모은다.
        // 마지막에 collect(Collectors.toList()) 사용

        List<String> names = null;
        names = money.stream()
                .map(n -> n.getName())
                .collect(Collectors.toList());

        if(names != null){
            names.forEach(System.out::println);
        }
    }
}

 

전체 출력값

 

total
66100
신사임당
백원
천원
오천원
만원
오만원

 

반응형