FilterExampleEx2의 또 다른 답안 질문
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 정보]
질문 내용의 위치:
3. 함수형 인터페이스.pdf _ 문제와 풀이 _ 문제1 - FilterExampleEx2제가 작성한 소스코드: https://inf.run/GQrVP
질문 요약:
1)
Predicate말고도 추가적으로filter()메서드도BiFunction함수형 인터페이스로 대체했는데, 이 정도까지 (메서드까지) 대체하는 것은 너무 과한 행동인지 궁금합니다.2)
BiFunction.apply()를 호출하여 필터링 하는 방식은filter()메서드로 필터링하는 방식보다 직관성이 떨어지기 때문에 권장되지 않는지 또는 그냥 사용해도 되는지 궁금합니다.
[질문 내용]
안녕하세요. 기존 FilterExampleEx2의 모든 부분을 자바가 제공하는 함수형 인터페이스로 대체하는 문제로 잘못 이해해서 filter(리스트, Predicate) 메서드까지 BiFunction<리스트, Predicate, 리스트> 함수형 인터페이스로 대체를 했습니다. 이때 제가 생각했을 때는 크게 두 가지 부분이 문제가 될 수도 있겠다고 생각을 했는데, 실제로도 문제가 될 위험이 있는지 궁금해서 질문드립니다. (필터링 결과는 동일합니다.)
(제가 추측한) 문제 상황1. 너무 과한 대체
메서드까지 함수형 인터페이스로 대체하는 것은 너무 과하다.
(제가 추측한) 문제 상황2. 직관성의 저하
(영한님 답안의 경우)
filter()메서드를 호출하는 방식의 경우 메서드명이filter로 직관적이다.(제 답안의 경우)
BiFunction.apply()를 호출하는 방식의 경우apply()라는 메서드명만 보고는 "필터링한다"라는 느낌을 받을 수 없어 직관적이지 못하다.
제가 작성한 소스코드는 [질문 정보] 부분에 구글 드라이브 링크를 첨부했으나, 혹시 몰라 질문글에도 작성해봅니다.
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);
}
}
Câu trả lời 2
1
안녕하세요. dev.rudevico님
이 문제에서 메서드까지 BiFunction으로 대체하는 것은 조금 과한 것 같아요. 가독성 측면에서도 읽기가 더 어렵구요.
하지만 메서드가 아닌 더 유연하게 람다 함수를 반환하는 것이 필요한 경우라면 의미가 있다 생각합니다.
감사합니다.
1
너무 과하게 인자를 받으시는거아닐까요,, 굳이굳이 싶은데여 여기서는
Predicate 가 여기서는 Integer 역할만하면되는데 굳이굳이 싶습니다.
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

