일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- @TransactionalEventListener
- HandlerMethodArgumentResolver
- 친절한 SQL 튜닝
- @Transactional Propagation
- Stream
- intellij favorites
- CompletableFuture
- IntelliJ
- multipart테스트
- findTopBy
- 리눅스
- aws
- ksql
- Linux
- 리팩토링 2판
- JPA
- vue.js
- 마이크로 서비스
- ksqldb
- 자바 ORM 표준 JPA 프로그래밍
- 자바 ORM 표준 JPA 프로그래밍 정리
- #docker compose
- intellij 즐겨찾기
- 원격 브랜 삭제
- 백명석님
- intellij 핵심 단축키
- Spring Cloud Netflix
- git
- javascript case
- Today
- Total
시그마 삽질==six 시그마
Stream collect 1탄 본문
해당글은 신용권님의 '이것이 자바다' 를 토대로 작성되었습니다.
예전에 남궁성님의 '자바의 정석' 그리고 신용권님의 '이것이 자바다' 두권다 보았는데
저는 개인적으로 신용권님의 책이 좀 더 핵심을 찌르고 직관적이어서 좋았던거 같습니다.
책은 요기에서 구매 가능합니다.
.stream().collect(Collectors.toMap(xxxx:getId, Functions.identity()));
Stream의 collect (Collector<T,A,R> collector) 메소드는 필터링 또는 매핑된 요소들을 새로운 컬렉션에 수집하고(그루핑,집계) 이 컬랙션을 리턴한다
Java util.stream 패키지의 Stream 인터페이스의 collect 메소드
Java util.stream 패키지의 tream 인터페이스의 collect 메소드의 매개변수인 -->Java util.stream 패키지의 인터페이스 Colletor
Java util.stream 패키지의 인터페이스 Colletor---> 의 구현체 Java util.stream 패키지의 Collectors의 정적메소드
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.html
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collectors.html
리턴 타입 | 메소드(매게 변수) | 인터페이스 |
R | collect(Collertor<T,A,R> collector) | Stream |
매개값인 Collector(수집기)는 어떤 요소를 어떤 컬랙션에 수집할 것인지 결정함
Collector의 타입 파라미터 T는 요소이고 A는 누적기다. 그리고 R은 요소가 저장될 컬렉션임. 즉 T요소를 A누적기가 R에 저장한다는 뜻
Collector의 구현 객체는 Collectors 클래스의 다양한 정적 메소드를 이용해서 얻을 수 있음
리턴타입 | Collectors의 정적메소드 | 설명 |
Collector<T,?,List<T>> | toList() | T를 List에 저장 |
Collector<T,?,Set<T>> | toSet() | T를 set에 저장 |
Collector<T,?,Collection<T>> | toCollection(Supplier<CollectionT>>) | T를 Supplier가 제공한 Collection에 저장 |
Collector<T,?,Map<K,U>> | toMap( Function<T,K> keyMapper, Function<T,U> valueMapper) |
T를 K와 U로 매핑해서 K를 키로, U를 값으로 Map에 저장 |
Collector<T,?,ConcurrentMap<K,U>> | toConcurrentMap( Function<T,K> keyMapper, Function<T,U> valueMapper) |
T를 K와 U러 메핑해서 K를 키로, U를 값으로 ConcurrentMap에 저장 |
@Data
@AllArgsConstructor
public class Student {
private String name;
private int score;
private Gender gender;
private City city;
public Student(String name, int score, Gender gender) {
this.name = name;
this.score = score;
this.gender = gender;
}
}
public enum Gender {
MALE
, FEMALE
}
public enum City {
Seoul
, Pusan
}
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GenderDto {
private Gender gender;
private List<Student> students;
}
@Test
public void collectTest() throws Exception {
List<Student> totalList = Arrays.asList(
new Student("공유", 6, Gender.MALE),
new Student("김태희", 6, Gender.FEMALE),
new Student("원빈", 10, Gender.MALE),
new Student("전지현", 10, Gender.FEMALE)
);
List<Student> maleList = totalList.stream()
.filter(s->s.getGender()==Gender.MALE)
.collect(Collectors.toList());
maleList.stream()
.forEach(s -> System.out.println(s.getName()));
System.out.println("=================================");
Map<Gender, Student> collect = totalList.stream()
.filter(s -> Objects.equals(s.getGender(),Gender.MALE) && Objects.equals(s.getScore(),6))
//.collect(Collectors.toMap(y->y.getGender(), x -> x, (x, y) -> x)); //키에 값이 두개 이상이면 첫번째꺼 가져옴
.collect(Collectors.toMap(Student::getGender, Function.identity(), (x, y) -> x)); //키에 값이 두개 이상이면 첫번째꺼 가져옴
//.collect(Collectors.toMap(Student::getGender, Function.identity()));//키에 값이 두개 이상이면 IllegalStateException
//.collect(Collectors.toMap(Student::getGender, Student::getScore));
System.out.println("collect:"+collect);
System.out.println("=================================");
collect.forEach((k,v)-> System.out.println("k:"+k+" v:"+v));
System.out.println("=================================");
Set<Student> femaleSet = totalList.stream()
.filter(s -> s.getGender() == Gender.FEMALE)
//.collect(Collectors.toCollection(HashSet :: new));
//.collect( Collectors.toCollection(()->{return new HashSet<Student>();}) );
.collect(Collectors.toCollection(() -> new HashSet<Student>()));
femaleSet.stream()
.forEach(s -> System.out.println(s.getName()));
}
결과
공유
원빈
=================================
collect:{MALE=Student(name=공유, score=6, gender=MALE, city=null)}
=================================
k:MALE v:Student(name=공유, score=6, gender=MALE, city=null)
=================================
김태희
전지현
'프로그래밍 > Java' 카테고리의 다른 글
Stream collect 3탄(그룹핑후 매핑 및 집계) (0) | 2020.08.27 |
---|---|
Stream collect 2탄(그룹핑) (0) | 2020.08.27 |
[mac] java 버전 변경 jenv (0) | 2020.08.18 |
java stream 객체 필드로 sorted (0) | 2020.04.20 |
Java stream 객체 필드 수정 (0) | 2020.04.16 |