본문 바로가기

모던자바3

모던 자바 인 액션 - 5장 마무리 5장에서는 Stream 의 파이프라인을 구축하는 법 부터 여러 연산에 활용하는 법에 대해 다룬다. stream 연산의 파이프라인은 기본적으로 소스 -> 중간연산 -> 최종연산의 형태로 구성된다. 소스는 Stream 의 대상이 되는 각 요소들을 포함하는 데이터를 의미한다. 중간연산은 각 요소에 대한 연산들을 의미하며 반환값은 Stream 의 형태를 갖는다. 최종연산은 Stream의 결과값에 대한 연산을 의미한다. 대표적으로 forEach(), collect() 등의 연산이 있다. 이러한 스트림 연산을 필터링하거나 자를때에는 filter(), takeWhile(), dropWhile(), distinct(), skip(), limit() 의 메서드를 이용할 수 있다. 또한 소스가 정렬되어 있는 상태에서 ta.. 2022. 12. 7.
스트림의 활용 및 생성 - 모던 자바 인 액션 1. Stream 을 이용하여 피타고라스 수 만들기 Stream pythaWithDouble = IntStream.rangeClosed(1, 100).boxed() .flatMap(a -> IntStream.rangeClosed(a, 100) .mapToObj(b -> new double[]{a, b, Math.sqrt(a * a + b * b)})) .filter(t -> t[2] % 1 == 0); 결론부터 말하면 위의 코드를 이용하여 피타고라스 수를 만들 수 있다. 하나하나 뜯어보면 1. 먼저 IntStream 의 rangeClosed(a,b) 메서드는 inclusive 한 범위내의 숫자를 stream 으로 반환해주는 메서드이다. 이를 통해 1~100 까지의 숫자로 이루어진 stream 을 생성할 .. 2022. 12. 1.
람다식, 메서드 참조를 이용하여 예외 발생시 성공할 때 까지 반복 구현 - 함수형 인터페이스 우아한테크코스를 진행하면서 "예외사항이 발생하는 경우 예외를 던진 후 예외사항이 발생한 지점부터 다시 입력을 받아라" 라는 요구사항이 있었다. 그래서 처음 생각한 방법은 while 반복문으로 try ~ catch 문을 감싸, 예외가 발생하지 않는 경우 retrun 을 통해 반복문을 탈출하는 방법이었다. 아래의 코드는 해당 방법을 구현한 것이다. private int getAttempts() { outputView.askAttemptsInput(); while (true) { try { return inputView.insertAttempts(); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } } } 이 방법을 사용.. 2022. 12. 1.