Function.identity()
2594 단어 JAVA 기술
Function.identity () 는 무엇입니까?
// Stream Map
Stream stream = Stream.of("I", "love", "you", "too");
Map map = stream.collect(Collectors.toMap(Function.identity(), String::length));
Function은 인터페이스입니다. 그러면 Function.identity () 는 무슨 뜻입니까?설명은 다음과 같습니다.
Java 8에서는 인터페이스에 구체적인 방법을 추가할 수 있습니다.인터페이스의 구체적인 방법은 두 가지가 있는데 default 방법과 static 방법이다.identity () 는 바로 Function 인터페이스의 정적 방법이다.Function.identity () 는 출력과 입력이 같은 Lambda 표현식 대상을 되돌려줍니다. 이것은
t -> t
형식의 Lambda 표현식과 같습니다.identity() 메서드 JDK 소스는 다음과 같습니다.
static Function identity() {
return t -> t;
}
Function.identity () 의 응용
다음 코드에서
Task::getTitle
하나의task가 필요하고 제목만 있는 키를 생성합니다.task -> task
는 자신을 되돌려주는lambda 표현식으로, 상례에서task를 되돌려줍니다.private static Map taskMap(List tasks) {
return tasks.stream().collect(toMap(Task::getTitle, task -> task));
}
Function
인터페이스의 기본 방법identity
을 사용하여 위의 코드 코드를 더욱 간결하고 명확하게 하고 개발자의 의도를 전달할 때 더욱 직접적으로 할 수 있으며 다음은 identity
함수를 사용하는 코드이다.import static java.util.function.Function.identity;
private static Map taskMap(List tasks) {
return tasks.stream().collect(toMap(Task::getTitle, identity()));
}
Function.identity() or t->t?
Arrays.asList("a", "b", "c")
.stream()
.map(Function.identity()) // str) // str)); //
위의 코드에서 왜
Function.identity()
대체str->str
를 사용합니까?그것들은 어떤 차이가 있습니까?위의 코드에서
str -> str
와 Function.identity()
는 별 차이가 없습니다. 왜냐하면 그들은 모두 t->t
이기 때문입니다.그러나 우리는 때때로 사용할 수 없다Function.identity
. 아래의 예를 보자.List list = new ArrayList<>();
list.add(1);
list.add(2);
다음 코드를 성공적으로 실행할 수 있습니다.
int[] arrayOK = list.stream().mapToInt(i -> i).toArray();
하지만 아래처럼 쓰면:
int[] arrayProblem = list.stream().mapToInt(Function.identity()).toArray();
실행할 때 오류가 발생합니다.
mapToInt
요구하는 매개 변수는 ToIntFunction
형식이지만 ToIntFunction
형식과 Function
관계가 없기 때문입니다.작성자: zoyoto 링크:https://www.jianshu.com/p/cd694d2d8be5출처: 간서간서의 저작권은 작가의 소유이며, 어떠한 형식의 전재도 작가에게 연락하여 권한을 수여받고 출처를 밝히십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Springboot 2 RestTemplate 설정 시간 초과텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.