공부 기록들/우테코

    [모던 자바 인 액션 스터디] 7장 병렬 데이터 처리와 성능

    7장. 병렬 데이터 처리와 성능 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. public long sequentialSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .reduce(0L, Long::sum); } n이 커진다면 병렬로 처리하는 것이 좋을텐데 한 번 처리해보자. public long parallelSum(long n) { return Stream.iterate(1L, i -> i + 1) .limit(n) .parallel() .reduce(0L, Long::sum); } 순차 스트림에 parallel()메서드를 호출하면 기존의 함수형 리듀싱 연산이 병렬로 처리된다. 순차 스트림에 parallel()을 ..

    [모던 자바 인 액션 스터디] 6장 스트림 활용

    6. 스트림으로 데이터 수집 컬렉터로 스트림의 항목을 컬렉션으로 재구성할 수 있다. long howManyDishes = menu.stream().collect(Collectors.counting()) 다음과 같이 말이다. 물론 이 코드는 menu.stream().count()로 생략할 수 있다. Comparator dishCaloriesComparator = Comparator.comparingInt(Dish:;getCalories); Optional mostCalorieDish = menu.stream().collect(maxBy(dishCaloriesComparator)); maxBy, minBy를 이용해서 스트림의 최댓값과 최솟값을 계산할 수 있다. summingInt는 객체를 int로 매핑하는 ..

    [모던 자바 인 액션 스터디] 5장 스트림 활용

    5. 스트림 활용 filter 메서드는 Predicate를 인수로 받아서 프레디케이트와 일치하는 모든 요소를 포함하는 스트림을 반환한다. dictinct는 중복을 필터링한다. (고유 여부는 hashCode와 equals로 결정된다) takeWhile 를 이용하면 해당 프레디케이트가 false면 동작을 멈춘다. List filteredMenu = specialMenu.stream() .takeWhile(dish -> dish.getCalories() < 320) .collect(toList()); specialMenu 내부에 칼로리 오름차순으로 정렬이 되어있다면 해당 프레디케이트가 true일 동안만 작동한다. filter 였으면 다 돌았을 것이다. dropWhile은 해당 프레디케이트가 처음으로 거짓이 되..

    [모던 자바 인 액션 스터디] 4장 스트림 소개

    4_스트림 소개 스트림은 자바 8 API에 새로 추가된 기능이다. 스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다. 스트림을 이용하면 멀티스레드 코드를 구현하지 않아도 데이터를 투명하게 병렬로 처리할 수 있다. stream()을 parallelStream()으로 바꾸면 코드를 멀티코어 아키텍처에서 병렬로 실행할 수 있다. 스트림은 제어 블록 없이 선언형으로 코드를 구현할 수 있다. 빌딩 블록 연산을 연결해서 복잡한 데이터 처리 파이프라인을 만들 수 있다. 스트림은 &#39;데이터 처리 연산을 지원하도록 소스에서 추출된 연속된 요소&#39;로 정의 가능하다. 스트림에서는 파이프라이닝 덕분에 게으름, 쇼트서킷같은 최적화를 얻을 수 있다. 데이터를 언제 계산하느냐가 컬렉션과 스트림의 가장 큰 차이..

    순차적 스트림, 병렬 스트림 그리고 findAny와 findFirst 에 대해

    순차적 스트림, 병렬 스트림 그리고 findAny와 findFirst 에 대해 지난번 스터디 때에 손너잘이 밑의 제 코드에 대해서 스트림은 비내리듯이 병렬로 진행되기 때문에 findFirst를 사용하여도 첫 값이 보장이 안되기에 findAny를 사용해야할 것 같다고 지적을 했습니다. 그렇다면 왜 두 메서드를 따로 나뒀을까 싶어서 찾아 봤습니다. public enum Grade { A((score) -> score >= 95), B((score) -> score >= 90), C((score) -> score >= 80), D((score) -> score >= 70), F((score) -> true); Predicate gradePredicate; Grade(Predicate predicate) { g..

    함수형 인터페이스를 이용할 때 착각했던 점

    함수형 인터페이스를 이용할 때 착각했던 점 정말 멍청했다. 모던 자바 인 액션 2번째 읽는건데 아무 생각없이 읽었었나 보다. 손너잘이 망각한 내 뇌를 리마인드 시켜줬다. Predicate p = (i) -> i % 2 == 0; 다음과 같고 이를 실행하기 위해서는 test메서드를 사용한다. 나는 함수형 인터페이스를 특별 취급하여 생각했다. 이 또한 인터페이스인데 말이다. 내가 선언해준 식이 해당 test 추상 클래스 내부로 들어가는줄 알았다. 그런게 전혀 아닌데 말이다. Comparator c = new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); } }; 위의 new Compar..

    로또 구현 피드백 정리

    로또 구현 피드백 정리 Custom Exception 생성 시에 어떤 값으로 인해 예외가 던져졌는지 보여주자 계산 과정에서 double를 리턴한다고 해당 계산 재료를 미리 double로 던져두면 혼동이 생길 수도 있으니깐 int로 일단 받고 나중에 (double)로 캐스팅하는 것이 좋다. 이번 구현을 통해 사용해본 것 일급 컬렉션 Enum 사용법 TreeSet Stream 원시 값 포장

    [모던 자바 인 액션 스터디] 3장 람다 표현식

    3주간 스터디를 진행하게 됐다. 안그래도 이전에 쭉 정리했던 자바 인 액션 책을 다시 읽어보려던 참이었는데 타이밍 맞게 스터디가 있어 참여하게 됐다. 나름 간단하게 정리하려고 노력했다. 람다 표현식 정리 람다 표현식은 익명 함수를 단순화한 것 Comparator byWeight = new Comparator () { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); } }; => Comparator byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); 다음과 같이 익명 함수를 단순화 시킨다. 어디에서 람다를 사용..