이전 포스팅에서 Java 8 이후에 등장한 스트림(Stream)에 대하여 알아보았습니다. Stream API는 생성, 중개, 종료의 구조로 사용되는데 이번 포스팅에서는 중개연산 방법 중 하나인 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는 더욱 넓은 범위로 사용되고 알아야 할 것도 많습니다. 추가적인 내용은 다음 포스팅에서 다루도록 하겠습니다.
'Languages > Java' 카테고리의 다른 글
[Java]ArrayList와 LinkedList 적절하게 사용하기(Java의 동적 배열) (1) | 2023.07.06 |
---|---|
[Java]do while, while문은 어떤 상황에서 사용할까? (2) | 2023.07.02 |
[Java]다형성을 지원하는 방법 오버로딩과 오버라이딩 개념 잡기 (2) | 2023.06.24 |
[Java]Static의 사용을 지양해야하는 이유(정적 변수, 정적 메서드) (1) | 2023.06.18 |
[Java]일반적인 for문과 이후의 등장한 향상된 for문 알아보기 (2) | 2023.06.06 |