T.I.L #38 스트림 API를 통해 람다 연습하기

개발자지망생·2023년 12월 1일
0

계기

책으로만 그리고 강의로만 람다를 배우다보니 뭔가 내것이 되는것같지 않아서 직접 아주 작은 프로젝트를 해보려고 한다. 구글링 하면서 찾아낸 대표적인 프로젝트를 해보려 한다.

프로젝트 설명

프로젝트 제목 : 자바 스트림 API와 람다 표현식을 활용한 데이터 처리

프로젝트 목적 : 자바의 스트림 API와 람다 표현식을 사용하여 효율적인 데이터 처리 방법을 익히려 함, 축구 선수들의 리스트를 사용하여 필터링, 매핑, 평균 구하기 등등 스트림 연산을 해보고 이 과정에서 람다 표현식을 숙달하려 함.

사용된 기술 : Java17, JDK17

진행 과정

1. User 클래스 정의

  • 먼저 User 클래스를 생성해서 사용자의 정보를 저장한다. 축구선수들의 이름, 나이, 국가, 총 3가지 속성을 저장한다.
public class User {
    private String name;
    private int age;
    private String country;
  • 이후 생성자와 게터,세터를 만들어준다. 아주 간단하게 ALT+INSERT 단축키를 통해 만들어 준다.(윈도우기준)
// 생성자
    public User(String name, int age, String country) {
        this.name = name;
        this.age = age;
        this.country = country;
    }
// Getter와 Setter 메서드
    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }

2. 사용자 객체 생성 및 리스트 저장

  • 이 부분은 스트림 API를 사용하기 위해 User의 객체를 생성하고, 이들을 리스트에 저장하는 단계이다.
public class StreamApiExample {
    public static void main(String[] args) {
        List<User> users = Arrays.asList(

                // 사용자 객체 생성
                new User("손흥민", 31, "대한민국"),
                new User("메시", 36, "아르헨티나"),
                new User("호날두", 38, "포르투갈"),
                new User("음바페", 24, "프랑스"),
                new User("홀란드", 23, "노르웨이"),
                new User("티아고실바", 39, "브라질"),
                new User("이강인", 22, "대한민국"),
                new User("김민재", 27, "대한민국")
        );
  • 먼저 User 캑체들을 저장하기 위한 List를 선언한다.
  • 여기서 List는 순서가 있는 컬렉션으로, User 객체들을 순자척으로 저장한다.
  • 그리고 Arrays.asList() 메서드는 괄호 안에 나열된 요소들로 구성된 고정 크기의 리스트를 반환해준다.
  • 이 리스트는 users 변수에 할당되어서, User객체들의 집합이 된다.

3. 람다식 활용하기

  • 이제 기초공사는 끝났으니 여러 스트림 연산을 사용해보자
  1. 모든 사용자 이름 출력
users.stream()
                .forEach(user -> System.out.println(user.getName()));
  • users.stream()은 User 객체들의 리스트를 스트림으로 변환하는 코드이다.

  • 그리고 forEach가 User객체의 name 속성을 출력해준다.

업로드중..

  1. 특정 국가의 사용자 필터링
users.stream()
                .filter(user -> user.getCountry().equals("대한민국"))
                .forEach(user -> System.out.println(user.getName()));
  • filter는 주어진 조건(country속성 중 대한민국)에 따라 필터링 해준다.

업로드중..

  1. 평균 나이 계산
double averageAge = users.stream().mapToInt(User::getAge).average().orElse(0);

        System.out.println("Average Age: " + averageAge);
  • mapToInt는 각 요소를 int 값으로 변환시켜준다.
  • average는 그 int값의 평균을 계산하고, 그 계산값은 OptionalDouble타입으로 반환한다.
  • orElse(0)은 만약 메서드 평균값이 없을 경우에 0을 반환해준다.
    업로드중..

4. 마무리

이 외에도 만약 내가 선수이름을 영어로 했다면, 선수 이름을 대문자로 출력할 수도 있고 나이가 30이상인 사람들을 출력할 수도 있다.
워낙 다양하게 활용할 수 있어서 그때그때 필요한 상황에 따라 찾아보면서 람다식을 사용하면 될듯하다. 이상 끝!

0개의 댓글