inflearn logo
강의

Course

Instructor

Real-World Java - Advanced Part 3, Lambda, Streams, and Functional Programming by Kim Young-han

Problem and Solution

FilterExampleEx2의 또 다른 답안 질문

Resolved

148

devrudevico

44 asked

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 정보]

 

[질문 내용]

안녕하세요. 기존 FilterExampleEx2의 모든 부분을 자바가 제공하는 함수형 인터페이스로 대체하는 문제로 잘못 이해해서 filter(리스트, Predicate) 메서드까지 BiFunction<리스트, Predicate, 리스트> 함수형 인터페이스로 대체를 했습니다. 이때 제가 생각했을 때는 크게 두 가지 부분이 문제가 될 수도 있겠다고 생각을 했는데, 실제로도 문제가 될 위험이 있는지 궁금해서 질문드립니다. (필터링 결과는 동일합니다.)

 

(제가 추측한) 문제 상황1. 너무 과한 대체

 

(제가 추측한) 문제 상황2. 직관성의 저하


제가 작성한 소스코드는 [질문 정보] 부분에 구글 드라이브 링크를 첨부했으나, 혹시 몰라 질문글에도 작성해봅니다.

package lambda.ex3;

import java.util.ArrayList;
import java.util.function.BiFunction;
import java.util.function.Predicate;
import java.util.List;

// 내 풀이
public class FilterExample {

    public static void main(String[] args) {
        List<Integer> numbers = List.of(-3, -2, -1, 1, 2, 3, 5);
        System.out.println("원본 리스트: " + numbers);

        // predicate까지 parameter로 받으면 더 유연하다.
        BiFunction<List<Integer>, Predicate<Integer>, List<Integer>> listFilter =
                (numberList, predicate) -> {
                    ArrayList<Integer> filteredList = new ArrayList<>();
                    for (Integer number : numberList) {
                        if (predicate.test(number)) filteredList.add(number);
                    }
                    return filteredList;
                };

        // 조건 1. 음수(negative)만 골라내기
        Predicate<Integer> isNegative = n -> n < 0;
        List<Integer> negatives = listFilter.apply(numbers, isNegative);
        System.out.println("음수만: " + negatives);

        // 조건 2. 짝수(even)만 골라내기
        Predicate<Integer> isEven = n -> n % 2 == 0;
        List<Integer> evens = listFilter.apply(numbers, isEven);
        System.out.println("짝수만: " + evens);
    }
}

java 함수형-프로그래밍 lambda optional

Answer 2

1

yh

안녕하세요. dev.rudevico님

이 문제에서 메서드까지 BiFunction으로 대체하는 것은 조금 과한 것 같아요. 가독성 측면에서도 읽기가 더 어렵구요.

하지만 메서드가 아닌 더 유연하게 람다 함수를 반환하는 것이 필요한 경우라면 의미가 있다 생각합니다.

감사합니다.

1

devrudevico

무슨 말씀이신지 이해했습니다. 소중한 답변 감사합니다!

1

ppj2130

너무 과하게 인자를 받으시는거아닐까요,, 굳이굳이 싶은데여 여기서는

 

Predicate 가 여기서는 Integer 역할만하면되는데 굳이굳이 싶습니다.

0

devrudevico

그쵸..? 만들고 나서 좀 과하다는 느낌을 받았는데, 다른 분들 생각도 비슷한가 보군요. 소중한 의견 감사합니다!

db sql vs java stream 비교 궁금증 알려주세요!

1

70

1

파라미터 구분이 안되는지..?

0

68

1

자바 21 버전을 꼭 써야하나요??

0

143

2

9. 스트림 API3-컬렉터 오타?

0

78

2

(추석 챌린지) 복습 정리내용

0

94

1

람다 궁금한 점

0

72

2

스트림과 for문 질문

0

41

1

디폴트 메서드를 사용한 리펙토링

0

51

1

실무에서의 커스텀 Collector 사례 여부

0

62

1

IntelliJ 한글 깨지는 현상 문의

0

196

1

함수형 프로그래밍 적용 범위/원칙

0

59

1

스트림에 대해서 질문(float)은 사용하는지

0

55

1

[자료 패키지 누락] 2.람다 자료에서 문제 패키지명 생략 (25page)

0

60

2

지연 평가

0

68

1

메서드 시그니처

0

100

3

고급편 우선순위

0

129

3

스프링 데이터 JPA 인터페이스에서의 default 메서드 사용

0

112

2

독립적인 스레드 할당 시 스레드 개수는 어떻게 할당해야 할까요?

0

85

1

병렬 프레임 병목 현상 해결책에 대해 궁금한 점

0

101

1

스트림 중복 에러 관련 질문

0

69

1

자바 버전이 31 까지 업데이트 된다면 새로운 자바 강의를 추가 하실 건가요?

0

132

1

임계값과 스레드수를 줄일 경우 교착상태가 발생할수 있는건가요?

0

100

2

변수 합치기에 대해서 질문드립니다!

0

80

2

flatMap 응용 방법에 대해서, 이렇게 하는게 맞는지?

0

122

1