Java

<Java> Stream Filter 메서드

Mulenga 2023. 1. 21. 12:51
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