collect
collect(Colltecor<? super T,A,R> collector)
- 파라미터인 Collector 인터페이스 대신에 Collecter 클래스를 사용한다.
- cOOCECOR'S 클래스의 메서드는 STATIC이기 때문에 collectors.a메서드 형식을 사용한다.
class Stu{
String username;
int grade;
boolean isMale; //남자냐?
int age;
public Stu() {
// TODO Auto-generated constructor stub
}
public Stu(String username, int grade, boolean isMale, int age) {
this.username = username;
this.grade = grade;
this.isMale = isMale;
this.age = age;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public boolean isMale() {
return isMale;
}
public void setMale(boolean isMale) {
this.isMale = isMale;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stu [username=" + username + ", grade=" + grade + ", isMale=" + isMale + ", age=" + age + "]";
}
}
Stu [] stuArr = { new Stu("홍길동", 3, true, 25),
new Stu("이순신", 1, true, 55),
new Stu("유관순", 2, false, 18),
new Stu("안중근", 3, true, 31),
new Stu("홍범도", 1, true, 58),
new Stu("강감찬", 3, true, 44)
};
1. 이름만 출력
Arrays.stream(stuArr)
.map(Stu::getUsername)
.forEach(System.out::println);
System.out.println();
//홍길동
//이순신
//유관순
//안중근
//홍범도
//강감찬
2. 이름만 List에 저장
List<String> list = Stream.of(stuArr).map(Stu::getUsername).collect(Collectors.toList());
System.out.println("2. 이름만 List에 저장:" + list);
//2. 이름만 List에 저장:[홍길동, 이순신, 유관순, 안중근, 홍범도, 강감찬]
3. Map으로 저장 Map<이름, Stu>
Function<Stu, String> keyMapper = new Function<Stu, String>(){
@Override
public String apply(Stu t) {
return t.getUsername();
}
};
Function<Stu, Stu> valueMapper = new Function<Stu, Stu>() {
@Override
public Stu apply(Stu t) {
return t;
}
};
Map<String, Stu> m = Stream.of(stuArr).collect(Collectors.toMap(keyMapper, valueMapper));
Set<String> keys = m.keySet();
for(String key : keys) {
System.out.println(key + "=" + m.get(key));
}
//람다표현식
Map<String, Stu> m2 = Stream.of(stuArr).collect(Collectors.toMap(Stu::getUsername, t->t));
Set<String> keys2 = m2.keySet();
for(String key : keys2) {
System.out.println(key + "=" + m.get(key));
}
//홍범도=Stu [username=홍범도, grade=1, isMale=true, age=58]
//홍길동=Stu [username=홍길동, grade=3, isMale=true, age=25]
//강감찬=Stu [username=강감찬, grade=3, isMale=true, age=44]
//이순신=Stu [username=이순신, grade=1, isMale=true, age=55]
//유관순=Stu [username=유관순, grade=2, isMale=false, age=18]
//안중근=Stu [username=안중근, grade=3, isMale=true, age=31]
4. 갯수
long count = Stream.of(stuArr).collect(Collectors.counting());
System.out.println("4. 갯수: " + count);
//4. 갯수: 6
5. age 합계
int sum = Stream.of(stuArr).collect(Collectors.summingInt(Stu::getAge));
System.out.println("5. 합계: " + sum);
//5. 합계: 231
6. age 최대값
Optional<Stu> max = Stream.of(stuArr).collect(Collectors.maxBy(Comparator.comparing(Stu::getAge)));
System.out.println("6. 최대값:" + max.get());
System.out.println("6. 최대값:" + max.orElse(null));
//6. 최대값:Stu [username=홍범도, grade=1, isMale=true, age=58]
//6. 최대값:Stu [username=홍범도, grade=1, isMale=true, age=58]
7. age 최소값
Stu min = Stream.of(stuArr).collect(Collectors.minBy(Comparator.comparing(Stu::getAge))).orElse(null);
System.out.println("7. 최소값: " + min);
//7. 최소값: Stu [username=유관순, grade=2, isMale=false, age=18]
'Programming Language > JAVA' 카테고리의 다른 글
자바 스트림 API - Optional (0) | 2023.09.08 |
---|---|
자바 스트림 API - 최종처리(4)_collect2 (0) | 2023.09.08 |
자바 스트림 API - 최종처리(2)_IntStream, LongStream, DoubleStream의 집계메서드 (0) | 2023.09.08 |
자바 스트림 API - 최종처리_allMatch/anyMatch/noneMatch (0) | 2023.09.08 |
자바 스트림 API- 중간처리(3)_boxed/asDoubleStream() (0) | 2023.09.07 |