본문 바로가기
JAVA

2. 함수형 문법 사용 filter()

by leek94 2024. 10. 1.

1. 짝수만 호출하는 일반적인 방법

 

import java.util.List;

public class FP01Structured {

	public static void main(String[] args) {
		
		
		List<Integer> numbers = List.of(12, 9, 13,4,6,2,4,12,15);
//		printAllNumberInListStructured(numbers);
		printEvenNumberInListStructured(numbers);
	}

	private static void printAllNumberInListStructured(List<Integer> numbers) {
		// How to loop the numbers?
		for(int number : numbers) {
			System.out.println(number);
		}
	}
	
	private static void printEvenNumberInListStructured(List<Integer> numbers) {
		// How to loop the numbers?
		for(int number : numbers) {
			if(number%2 == 0)
			System.out.println(number);
		}
	}
}

 

 

2. 함수형 문법을 사용한 방법

 

public class FP01Functional2 {

	public static void main(String[] args) {
		
		List<Integer> numbers = List.of(12,9,13,4,6,2,4,12,15);
//		printAllNumberInLisFunctional(numbers);
		printEvenNumberInLisFunctional(numbers);
	}
	
	private static boolean isEven(int number) {
		return number%2 ==0;
	}

	private static void printAllNumberInLisFunctional(List<Integer> numbers) {
		// What to do?
		numbers.stream()
			.forEach(System.out::println);
		// 메서드 참조호출로 클래스명::메서드명 형식으로 사용 가능
	}
	
	private static void printEvenNumberInLisFunctional(List<Integer> numbers) {
		// What to do?
		numbers.stream()
			.filter(FP01Functional2::isEven) // 필터 - 짝수만 출력 => 메서드 호출이 아니고 알려주는 것임을 잊으면 안된다. true인것만 실행됨
			.forEach(System.out::println);
			// 메서드 참조호출로 클래스명::메서드명 형식으로 사용 가능
	}
}

 

3. 함수형 문법에 메서드를 직접 만들어서 사용하는 방법 -> 람다식

 

import java.util.List;

public class FP01Functional {

	public static void main(String[] args) {
		
		List<Integer> numbers = List.of(12,9,13,4,6,2,4,12,15);
//		printAllNumberInLisFunctional(numbers);
		printEvenNumberInLisFunctional(numbers);
	}
	
//	private static void print(int number) {
//		System.out.println(number);
//	}
	
//	private static boolean isEven(int number) {
//		return number%2 ==0;
//	}

	private static void printAllNumberInLisFunctional(List<Integer> numbers) {
		// What to do?
		numbers.stream()
			.forEach(System.out::println);
			// 메서드 참조호출로 클래스명::메서드명 형식으로 사용 가능
	}
	
	// number -> number%2 == 0
	private static void printEvenNumberInLisFunctional(List<Integer> numbers) {
		// What to do?
		numbers.stream()
			//.filter(FP01Functional2::isEven) // 필터 - 짝수만 출력 => 메서드 호출이 아니고 알려주는 것임을 잊으면 안된다. true인것만 실행됨
			.filter(number -> number%2 == 0) // 람다 표현식
			.forEach(System.out::println);
			// 메서드 참조호출로 클래스명::메서드명 형식으로 사용 가능
	}
}

 

'JAVA' 카테고리의 다른 글

4. 함수형 문법 사용한 예제 2  (0) 2024.10.01
3. 함수형 문법을 사용한 예제  (0) 2024.10.01
1. 함수형 자바 문법 Stream()  (0) 2024.10.01
스트림 3  (0) 2023.03.03
스트림2  (0) 2023.02.24