728x90
filter 메서드
Stream 클래스에서 제공하는 filter() 메서드는 Predicate를 인수로 받아서 일치하는 모든 요소를 포함하는 스트림으로 반환합니다.
filter 메서드 특징
- filter() 메서드는 중개 연산(intermediate operation)을 수행하므로 새로운 스트림을 생성합니다.
- 특정 조건을 만족하는 요소로 구성된 새로운 스트림을 생성합니다.
- filter() 메서드의 매개변수는 함수형 인터페이스인 Predicate입니다. 따라서, 람다 표현식도 전달할 수 있습니다.
- filter() 메서드의 매개변수에는 한 개의 매개변수를 가지며, Boolean 타입의 값을 반환하는 람다 표현식 또는 Predicate 타입의 객체가 전달되어야 합니다.
filter 메서드 사용 예시
다음과 같은 학생 Class가 있다고 가정하자.
class Student{
String name = "";
int age = 0;
int score = 0;
public Student(String name, int age, int score){
this.name = name;
this.age = age;
this.scroe = score;
}
String getName(){
return name;
}
int getAge(){
return age;
}
int getScore(){
return score;
}
}
이 학생 Class를 List에 넣어 원하는 조건의 Class를 가져오겠다.
List<Student> studentList = new ArrayList<Student>();
studentList.add(new Student("이정규", 28, 100));
studentList.add(new Student("이태정", 21, 80));
studentList.add(new Student("이민규", 22, 70));
studentList.add(new Student("김정규", 30, 60));
studentList.add(new Student("독고정규", 35, 50));
이제 필터 함수를 사용해서 조건을 걸어보자. 나는 이씨 성을 가진 학생들만을 가져오겠다.
studentList = studentList.stream()
.filter(f -> f.getName().startsWith("이")).collect(Collectors.toList());
for(Student stu : studentList){
System.out.println(stu.getName());
}
그럼 결과는 다음과 같이 나온다.
이정규
이태정
이민규
부등호를 사용해서 조건을 걸 수도 있다. 점수가 70점 이하인 학생만을 출력해 보겠다.
studentList = studentList.stream()
.filter(f -> f.getScore()<= 70).collect(Collectors.toList());
그 결과는 다음과 같다.
이민규
김정규
독고정규
이와같이 Stream Filter메서드를 사용해서 손쉽게 조건에 합당한 결과를 출력할 수 있다.
'Java' 카테고리의 다른 글
<JAVA> Stream sorted 메서드 (0) | 2023.01.24 |
---|---|
<JAVA> Stream Map메서드 (0) | 2023.01.23 |
JAVA Stream (0) | 2023.01.20 |
[Java] 이클립스 JDK 환경 설정 (0) | 2022.05.14 |
[Java] OpenJDK 1.8 설치 및 환경설정 (0) | 2022.05.14 |