SeouliteLab

[Java/자바] 다수의 Consumer 연산을 andThen()으로 처리하는 방법 본문

프로그래밍

[Java/자바] 다수의 Consumer 연산을 andThen()으로 처리하는 방법

Seoulite Lab 2024. 3. 13. 08:16

Java의 Consumer 인터페이스에서 제공하는 andThen() 메서드는 두 개의 Consumer를 연속적으로 실행할 수 있게 합니다. 여러 Consumer 연산을 순차적으로 처리하는 예제를 살펴보겠습니다.

예제 1: 문자열을 대문자로 변환한 후 출력하기

Consumer toUpperCase = str -> System.out.println("UpperCase: " + str.toUpperCase());
Consumer printLength = str -> System.out.println("Length: " + str.length());

Consumer combinedConsumer = toUpperCase.andThen(printLength);
combinedConsumer.accept("hello");

이 예제에서는 문자열을 대문자로 변환한 후 그 길이를 출력하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.

예제 2: 숫자를 제곱한 후 제곱근을 구하기

import java.util.function.DoubleConsumer;
import java.lang.Math;

DoubleConsumer square = num -> System.out.println("Square: " + (num * num));
DoubleConsumer squareRoot = num -> System.out.println("Square Root: " + Math.sqrt(num));

DoubleConsumer combinedConsumer = square.andThen(squareRoot);
combinedConsumer.accept(9.0);

이 예제에서는 숫자를 제곱한 후에 그 제곱근을 출력하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.

예제 3: 숫자 리스트의 합계와 평균을 구하기

import java.util.List;
import java.util.function.IntConsumer;

IntConsumer sumConsumer = numbers -> {
    int sum = numbers.stream().mapToInt(Integer::intValue).sum();
    System.out.println("Sum: " + sum);
};

IntConsumer averageConsumer = numbers -> {
    double average = numbers.stream().mapToInt(Integer::intValue).average().orElse(0);
    System.out.println("Average: " + average);
};

List<Integer> numbers = List.of(1, 2, 3, 4, 5);

IntConsumer combinedConsumer = sumConsumer.andThen(averageConsumer);
combinedConsumer.accept(numbers);

이 예제에서는 숫자 리스트의 합계와 평균을 구하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.

예제 4: 문자열을 변환한 후 길이와 대문자로 출력하기

Consumer toUpperCase = str -> System.out.println("UpperCase: " + str.toUpperCase());
Consumer printLength = str -> System.out.println("Length: " + str.length());
Consumer printBoth = toUpperCase.andThen(printLength);

printBoth.accept("java");

이 예제에서는 문자열을 대문자로 변환한 후에 그 길이를 출력하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.

예제 5: 소수인지를 판별하고 출력하기

import java.util.function.IntConsumer;

IntConsumer primeChecker = number -> {
    boolean isPrime = true;
    for (int i = 2; i <= Math.sqrt(number); i++) {
        if (number % i == 0) {
            isPrime = false;
            break;
        }
    }
    if (isPrime)
        System.out.println(number + " is a prime number");
    else
        System.out.println(number + " is not a prime number");
};

IntConsumer printSquare = number -> System.out.println("Square: " + (number * number));

IntConsumer combinedConsumer = primeChecker.andThen(printSquare);
combinedConsumer.accept(17); // 출력 결과: 17 is a prime number, Square: 289

이 예제에서는 소수인지를 판별한 후에 그 제곱을 출력하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.

예제 6: 파일을 삭제하고 결과를 출력하기

import java.io.File;
import java.util.function.Consumer;

Consumer<String> fileDeleter = filePath -> {
    File file = new File(filePath);
    if (file.delete()) {
        System.out.println("File deleted successfully: " + filePath);
    } else {
        System.out.println("Failed to delete the file: " + filePath);
    }
};

Consumer<String> printResult = result -> System.out.println("Deletion result: " + result);

Consumer<String> combinedConsumer = fileDeleter.andThen(printResult);
combinedConsumer.accept("path/to/file.txt");

이 예제에서는 파일을 삭제한 후에 그 결과를 출력하는 두 개의 Consumer를 andThen()으로 연결하여 실행했습니다.