본문 바로가기

얄코의 제대로 파는 자바/섹션9 함수형 프로그래밍6

스트림 문제 풀이 아래와 같은 User.csv가 있다고 할 때, 아래의 CSV 데이터를 조회하여 아래와 같은 결과를 출력한다고 하자.// User.csv이름, 취미, 소개김프로, 축구:농구:야구, 구기종목 좋아요정프로, 개발:당구:축구, 개발하는데 뛰긴 싫어앙몬드, 피아노, 죠르디가 좋아요 좋아좋아너무좋아죠르디, 스포츠댄스:개발, 개발하는 죠르디 좋아박프로, 골프:야구, 운동이 좋아요정프로, 개발:축구:농구, 개발도 좋고 운동도 좋아 문제 1.1위와 같은 데이터를 조회하여 각 취미를 선호하는 인원이 몇 명인지 계산하여라.출처: https://mangkyu.tistory.com/116 [MangKyu's Diary:티스토리]  //1. 데이터를 어떻게 저장하나> // 클래스로 만들어서 클래스 배열로?.. 2024. 8. 17.
스트림 연산 Stream 연산 예시 IntStream .range(1, 100)//1~99까지 생성 .filter(i -> i % 2 == 0)//짝수인 값만 통과시키는 필터.Predicate 함수를 받음. // 💡 아래의 중간과정을 하나하나 주석해제해 볼 것 .skip(10)//앞에서 부터 숫자 10개 제거 .limit(10)//10개만 스트림으로 반환 .map(i -> i * 10)//인자별로 각각 10을 곱한 값을 반환 .forEach(System.out::println);//각 요소 별로 주어진 Consume.. 2024. 8. 16.
스트림 스트림연속되는 요소들의 흐름배열, 콜렉션, 파일 등에서 만들어질 수 있음오직 한번만 처리한다.내부적으로 수행되므로, 외부 변수가 생기지 않아 예외적인 상황이 줄어든다.여러 자료형식을 통일된 프로세스로 가공할 수 있다.원본을 수정하지 않기 때문에 정렬등에 영향을 받지 않는다.가독성이 좋다.멀티쓰레딩으로 병렬처리가 가능하다.Lazy한 특성을 가진다.1. 최종연산이 호출되기 전까지 중간연산이 아무런 작업을 하지 않음.2. 필요한 데이터를 검사했으면 그 이후 처리는 하지 않고 최적화해서 반환. 이얘기는 요소 1개당에 대한 얘기다. filter,map,, 순으로 스트림이 구성되어 있으면 filter에서 특정요소가 걸러지면 바로 다음요소로 넘어간다. Eager EvaluationLazy Evaluation사용 목적.. 2024. 8. 12.
메서드 참조 메소드 참조람다식 코드를 간편화 하는 것메소드 1개만 호출할 경우람다식과 메서드의 의미가 사실상 같은 경우인터페이스와 메서드가 인자, 리턴값 구성이 동일할 경우  예시# 클래스 메소드 호출{클래스명}::{클래스 메소드명}# 인스턴스 메소드 호출{클래스명}::{인스턴스메소드명}{인스턴스}::{인스턴스메소드명}# 클래스 생성자 호출{클래스}::new     // 클래스의 클래스 메소드에 인자 적용하여 실행 Function intToStrLD = (i) -> String.valueOf(i); Function intToStrMR = String::valueOf; String intToStr = intToStrMR.apply(123); String.valueOf()는 in.. 2024. 8. 11.
java.util.function 패키지 자바는 람다식을 위한 함수형 인터페이스가 정의되어 있어야 함 필요할 때마다 정의해야 하므로 번거로운 단점이 있었다.자주 사용하는 인터페이스가 java.util.function 패키지에 제공하고 있어서, 자료형으로 가져다 쓰면 된다.곧 배울 스트림에서 유용하게 사용 정의되어 있는 함수형 인터페이스    적용 예더보기ThreadInterface funcThread = (firstTime, multiplyTime) -> {Thread.sleep( (long)((firstTime+checkRandom.nextDouble())*multiplyTime));}; 를 BiConsumer funcThread = (firstTime, multiplyTime) -> { try { sleep( (long)(.. 2024. 8. 4.
람다식과 함수형 인터페이스 정리 함수형 인터페이스는 1개의 추상 메서드를 가지고 있는 인터페이스로서, 람다식을 사용하기 위한 전제 조건이 된다.@FunctionalInterface라는 어노테이션을 사용하는데, 없어도 지장은 없지만 추상메서드 2개 사용을 막아주는 역할을 한다.람다식 사용시 조건들(한줄만 있다던가, 리턴값만 있다던가, 매개변수의 개수)에 따라서 생략할 수 있는 부분이 달라진다.  활용 예시더보기코드내에서 Thread sleep 시간을 랜덤시간까지 활용해서 쓰는 부분이 많았다.그래서 코드상에 nextdouble*.. 과 같이 곱하는 로직이 계속 보였는데, 함수형 인터페이스를 활용해서package org.example.Util;@FunctionalInterfacepublic interface ThreadInterface.. 2024. 7. 28.