Collectors.toMap () keyMapper — 더 간결한 표현?
다음 Collectors.toMap()호출 에서 "keyMapper"함수 매개 변수에 대해보다 간결한 표현식을 작성하려고합니다 .
List<Person> roster = ...;
Map<String, Person> map =
roster
.stream()
.collect(
Collectors.toMap(
new Function<Person, String>() {
public String apply(Person p) { return p.getLast(); }
},
Function.<Person>identity()));
람다 식을 사용하여 인라인 할 수 있어야 할 것 같지만 컴파일되는 식을 찾을 수 없습니다. (나는 람다를 처음 접했기 때문에 그리 놀라운 일이 아닙니다.)
감사.
-> 업데이트 :
수락 된 답변에서 언급했듯이
Person::getLast
내가 찾던 것이었고 시도한 것입니다. 그러나 Eclipse 4.3의 BETA_8 nightly 빌드가 문제였습니다. 명령 줄에서 컴파일하면 (게시하기 전에 수행해야했던) 작동했습니다. 이제 eclipse.org에 버그를 신고 할 시간입니다.
감사.
람다를 사용할 수 있습니다.
Collectors.toMap(p -> p.getLast(), Function.identity())
또는 더 간결하게 다음을 사용하여 메서드 참조 를 사용할 수 있습니다 ::.
Collectors.toMap(Person::getLast, Function.identity())
대신에 Function.identity동등한 람다를 사용할 수 있습니다.
Collectors.toMap(Person::getLast, p -> p)
Netbeans를 사용하는 경우 익명 클래스를 람다로 대체 할 수있을 때마다 힌트를 받아야합니다.
List<Person> roster = ...;
Map<String, Person> map =
roster
.stream()
.collect(
Collectors.toMap(p -> p.getLast(), p -> p)
);
그것은 번역이 될 것이지만 나는 이것을 실행하지 않았거나 API를 사용하지 않았습니다. Function.identity () 대신 p-> p로 대체 할 수 있습니다. 그리고 정적으로 toMap (...) 가져 오기
동일한 키 충돌의 경우에도 선택적 병합 기능을 사용할 수 있습니다. 예를 들어 두 명 이상의 사람이 동일한 getLast () 값을 가진 경우 값을 병합하는 방법을 지정할 수 있습니다. 이렇게하지 않으면 IllegalStateException이 발생할 수 있습니다. 이를 달성하는 예는 다음과 같습니다.
Map<String, Person> map =
roster
.stream()
.collect(
Collectors.toMap(p -> p.getLast(),
p -> p,
(person1, person2) -> person1+";"+person2)
);
참고 URL : https://stackoverflow.com/questions/19254884/collectors-tomap-keymapper-more-succinct-expression
'IT TIP' 카테고리의 다른 글
| WPF의 크기 조정 가능한 창에서 최소화 및 최대화를 제거하려면 어떻게합니까? (0) | 2020.10.22 |
|---|---|
| 정수를 16 진수로, 16 진수를 정수로 변환 (0) | 2020.10.22 |
| "new String ()"도 변경 불가능합니까? (0) | 2020.10.22 |
| 안전 모드에서 mysql 삭제 (0) | 2020.10.22 |
| Angular2-HTTP RequestOptions 헤더 (0) | 2020.10.22 |