Languages/Java

[Java]Stream 살펴보기_(2)Filter를 사용한 데이터 추출하기

MoonSta 2023. 6. 24. 22:06
 

[Java]stream 살펴보기_(1)등장 배경, 컬렉션과의 차이

2023.03.29 - [Languages/Java] - [Java] 컬렉션(Collection)의 개념과 구조 파악 하기 [Java]컬렉션(Collection)의 개념과 구조 파악 하기 📌컬렉션(Collection)의 개념과 구조 파악 하기 JAVA의 컬렉션(collection>이란 데

mooonstar.tistory.com

 

 이전 포스팅에서 Java 8 이후에 등장한 스트림(Stream)에 대하여 알아보았습니다. Stream API는 생성, 중개, 종료의 구조로 사용되는데 이번 포스팅에서는 중개연산 방법 중 하나인 Stream Filter를 사용하여 생성된 스트림에서 데이터를 추출해 보도록 하겠습니다. 

 

 


Stream Filter란? 

 

Stream Filter

 

 Java의 스트림을 사용하게 되면 가장 자주 사용되고, 중요한 메서드는 바로 filter 메서드일 것입니다. Stream 클래스에서 제공하는 이 메서드는 생성한 스트림의 요소를 순회하면서 사용자가 지정한 조건을 만족하는 요소만을 필터링하여 새로운 스트림을 반환시켜 주는 메서드입니다. 이제 Stream Filter의 기본 구조와 사용법에 대해 알아보도록 하겠습니다.

 


Stream filter  사용하기

 

우선 스트림 생성에 필요한 기본적인 클래스를 만들도록 하겠습니다.

public class CAR {
   private String name;			//차량의 이름
   private Integer cost;		//차량 가격
   private String manufacturer; //제조사
}

 

이제 필터링을 하기 전에 클래스에 매핑될 샘플 데이터를 만들어보도록 하겠습니다.

name cost manufacturer
디 올 뉴 코나 Electric 40,000,000 Hyundai
레이 14,000,000 KIA
Model 3 80,000,000 TSLA
포터 II Electric 특장차 32,000,000 Hyundai
포터 II 28,000,000 Hyundai
쏘렌토 41,000,000 KIA

 

이제 스트림으로 생성된 해당 데이터에 조건을 걸어 필터링을 하겠습니다. 

@DisplayName("제조사 : 테슬라인 차량 필터링")
public void filtering() {
    CAR car = car.stream()
      .filter(c.getManufacturer().equals("TSLA"))
      .findFirst()
      .orElseThrow(() -> new IllegalArgumentException());
    
    System.out.println("result :" + car.getName());
}

//result : Model 3

 


 

다중 필터 

 

또한 Stream API는 다중 필터를 사용하여 여러 가지 조건을 부여할 수 있습니다. 필터링 조건은 다음과 같습니다.

 

@DisplayName("제조사 : 현대, 가격 35000000이상")
public void filtering() {
    CAR car = car.stream()
      .filter(c.getManufacturer().equals("Hyundai"))
      .filter(c.getCost() > 35000000)
      .orElseThrow(() -> new IllegalArgumentException());
      
    
    System.out.println("result :" + car.getName());
}

//result : 디 올 뉴 코나 Electric

 

이처럼 다중으로 필터를 걸어 여러 가지 조건을 부여할 수 있습니다. 사실 복잡한 단일 필터로서도 똑같이 사용할 수 있지만, 코드의 간결성을 위해 다중필터를 사용하는 것이 좋은 것 같습니다.

 

 

 

추가적으로

 

 오늘은 Stream API 중 자주 쓰이는 filtering에 대하여 간단히 알아보았습니다. 사실 이외에도 Stream API는 더욱 넓은 범위로 사용되고 알아야 할 것도 많습니다. 추가적인 내용은 다음 포스팅에서 다루도록 하겠습니다.