SeouliteLab

[Java/자바] Stream.generate()와 Supplier: 다양한 활용 본문

프로그래밍

[Java/자바] Stream.generate()와 Supplier: 다양한 활용

Seoulite Lab 2024. 3. 13. 14:17

Java의 Stream.generate() 메서드는 무한한 요소를 생성하는 데 사용됩니다. 이 메서드는 주로 Supplier 함수형 인터페이스와 함께 사용되며, Supplier는 요소를 생성하는 로직을 제공합니다. 이를 통해 다양한 종류의 데이터를 생성할 수 있습니다.

예제 1: 무한한 난수 스트림 생성하기

랜덤한 정수를 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.util.Random;
import java.util.stream.Stream;

public class RandomNumberStream {
    public static void main(String[] args) {
        Stream<Integer> randomNumberStream = Stream.generate(() -> new Random().nextInt());
        randomNumberStream.limit(10).forEach(System.out::println);
    }
}

예제 2: 날짜 스트림 생성하기

특정 범위의 날짜를 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.time.LocalDate;
import java.util.stream.Stream;

public class DateStream {
    public static void main(String[] args) {
        Stream<LocalDate> dateStream = Stream.generate(() -> LocalDate.now().plusDays(1));
        dateStream.limit(10).forEach(System.out::println);
    }
}

예제 3: 문자열 패턴 생성하기

특정 패턴을 갖는 문자열을 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.util.stream.Stream;

public class PatternStream {
    public static void main(String[] args) {
        Stream<String> patternStream = Stream.generate(() -> "Pattern");
        patternStream.limit(10).forEach(System.out::println);
    }
}

예제 4: 피보나치 수열 생성하기

피보나치 수열을 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.util.function.Supplier;
import java.util.stream.Stream;

public class FibonacciStream {
    public static void main(String[] args) {
        Stream<Integer> fibonacciStream = Stream.generate(new FibonacciSupplier());
        fibonacciStream.limit(10).forEach(System.out::println);
    }
    
    static class FibonacciSupplier implements Supplier<Integer> {
        int a = 0;
        int b = 1;

        public Integer get() {
            int c = a + b;
            a = b;
            b = c;
            return a;
        }
    }
}

예제 5: 사용자 입력 생성하기

사용자로부터 입력을 받아 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.util.Scanner;
import java.util.stream.Stream;

public class UserInputStream {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Stream<String> userInputStream = Stream.generate(() -> scanner.nextLine());
        userInputStream.forEach(System.out::println);
    }
}

예제 6: 고정된 값 생성하기

고정된 값을 생성하는 무한한 스트림을 생성하는 예제입니다.

import java.util.stream.Stream;

public class FixedValueStream {
    public static void main(String[] args) {
        Stream<String> fixedValueStream = Stream.generate(() -> "Fixed Value");
        fixedValueStream.limit(10).forEach(System.out::println);
    }
}