4. 최종처리
1) allMatch(Predicate) : 모든 값이 만족하는지 체크
anyMatch(Predicate) : 최소 한개 값이 만족하는지 체크
noneMatch(Predicate): 모두 만족 안하는지 체크
2) 그룹핑 메서드
- 합계: sum():int
- 평균: average():OptionalDouble ( Optional? 값이 있는 경우 반환된 값과 관련된 메서드 호출이 가능.
값이 없는 경우에는 기본값을 설정해서 메서드 호출이 가능하도록 처리)
- 최대값: max(): OptionalInt
- 최소값: min(): OptionalInt
- 갯수: count(): long
==> Stream이 아니고 IntStream 인 경우에 사용할 수 있다. 단, count() 제외(******)
==> 중간처리와 연계해서 작업이 된다.
3) 컬렉션 타입 변환
- list로 변경
- map로 변경
예> .stream().collect(Collectors.toList());
.stream().중간처리.collect(Collectors.toList()); // toMap(k,v)
4) 컬렉션 대상의 그룹핑 메서드
- collect(Collectors.counting());
- collect(Collectors.summingInt(t->t.getEng()));
- collect(Collectors.averagingDouble(t->t.getEng()));
- collect(Collectors.maxBy(Comparator.comparing(Student8::getEng)));
- collect(Collectors.minBy(Comparator.comparing(Student8::getEng)));
package exam24_스트림;
import java.util.Arrays;
import java.util.List;
public class StreamTest03_최종처리1_allMatch_anyMatch_noneMatch {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(2,4,6);
// 1. allMatch(Predicate)
// 모든 값이 짝수값이냐?
boolean result = list.stream().allMatch(t -> t % 2 == 0);
System.out.println("모든 값이 짝수값이냐?: " + result);
// 2. anyMatc(Predicate)
// 3의 배수가 하나라도 있냐?
boolean result2 = list.stream().anyMatch(t -> t % 3 == 0);
System.out.println("3의 배수가 하나라도있냐?: " + result2);
// 3. noneMatch(Predicate)
// 모든값이 10보다 작냐? 모든 값이 3의 배수가 아니냐?
boolean result3 = list.stream().noneMatch(t -> t % 3 == 0);
System.out.println("모든값이 3의 배수가 아니냐?: " + result3);
}// end main
}
package exam24_스트림;
import java.util.Arrays;
import java.util.OptionalDouble;
import java.util.stream.IntStream;
public class StreamTest03_최종처리2_그룹메서드_sum_average_max_min_count {
public static void main(String[] args) {
IntStream s = Arrays.stream(new int[] { 1, 2, 3, 4, 5, 6 });
// 1. sum
int sum = s.sum();
System.out.println("1. sum: " + sum);
// 정수형 배열
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
int sum2 = Arrays.stream(arr).sum(); // ( * ) 사용빈도 높음.
System.out.println("1. sum2: " + sum2);
// 2. 평규니 average():OptionalDouble
OptionalDouble avg = Arrays.stream(arr).average();
double avg2 = avg.getAsDouble();
System.out.println("2. average: " + avg2); // 3.5
double avg3 = Arrays.stream(arr).average().getAsDouble();
System.out.println("2. average: " + avg3); // 3.5
// 3. 최대: max():OptionalInt
int max = Arrays.stream(arr).max().getAsInt();
System.out.println("3. max: " + max);
// 4. 최소: min():OptionalInt
int min = Arrays.stream(arr).min().getAsInt();
System.out.println("4. min: " + min);
// 5. 갯수: count():Long
long count = Arrays.stream(arr).count();
System.out.println("5. count: " + count);
// 중간처리 + 그룹함수
// 문1: 짝수만 총합 출력
int yyyy = Arrays.stream(arr).filter(t -> t % 2 == 0).sum();
System.out.println("문1) 짝수만 총합 출력: " + yyyy);
}// end main
}
package exam24_스트림;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
class Student9{
String name;
int kor; // 국어점수
int eng; // 영어점수
public Student9() {}
public Student9(String name, int kor, int eng) {
this.name = name;
this.kor = kor;
this.eng = eng;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
@Override
public String toString() {
return "Student [name=" + name + ", kor=" + kor + ", eng=" + eng + "]";
}
}//end clss
public class StreamTest03_최종처리3_컬렉션변환 {
public static void main(String[] args) {
List<Student9> list = new ArrayList<>();
list.add( new Student9("홍길동", 100, 80));
list.add( new Student9("이순신", 89, 90));
list.add( new Student9("유관순1", 99, 65));
list.add( new Student9("유관순2", 99, 34));
list.add( new Student9("유관순3", 99, 100));
//1. 이름만 출력
list.stream().map(t->t.getName()).forEach(System.out::println);
list.stream().map(Student9::getName).forEach(System.out::println);
//2. 이름만 List로 반환
// .stream().collect( Collector ) , .stream().collect( Collectors )
// Collector와 Collectors 관계는 상속관계
List<String> xxx = list.stream()
.map(Student9::getName)
.collect(Collectors.toList());
System.out.println("2. 이름만 List로 반환:" + xxx); // [홍길동, 이순신, 유관순1, 유관순2, 유관순3]
// 3. key:이름 value:Student9 형식의 Map로 반환
// toMap(Function, Function)
Function<Student9, String> k = new Function<Student9, String>() {
@Override
public String apply(Student9 t) {
return t.getName();
}
};;
Function<Student9, Student9> k2 = new Function<Student9, Student9>() {
@Override
public Student9 apply(Student9 t) {
return t;
}
};
Map<String, Student9> xxx2 = list.stream()
.collect(Collectors.toMap(k,k2));
Map<String, Student9> xxx3 = list.stream()
.collect(Collectors.toMap(t->t.getName(),t->t));
Map<String, Student9> xxx4 = list.stream()
.collect(Collectors.toMap(Student9::getName,t->t));
System.out.println("3. key:이름 value:Student9 형식의 Map로 반환:" + xxx4);
}
}
package exam24_스트림;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
class Student8 {
String name;
int kor; // 국어점수
int eng; // 영어점수
public Student8() {
}
public Student8(String name, int kor, int eng) {
this.name = name;
this.kor = kor;
this.eng = eng;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getKor() {
return kor;
}
public void setKor(int kor) {
this.kor = kor;
}
public int getEng() {
return eng;
}
public void setEng(int eng) {
this.eng = eng;
}
@Override
public String toString() {
return "Student [name=" + name + ", kor=" + kor + ", eng=" + eng + "]";
}
}// end Student class
public class StreamTest03_최종처리4_컬렉션대상그룹메서드 {
public static void main(String[] args) {
// 정수형 배열 ==> IntStream 의 메서드로 처리해야 된다.
int[] arr = new int[] { 1, 2, 3, 4, 5, 6 };
int sum2 = Arrays.stream(arr).sum();
List<Student8> list = new ArrayList<>();
list.add(new Student8("홍길동", 100, 80));
list.add(new Student8("이순신", 89, 90));
list.add(new Student8("유관순", 99, 65));
list.add(new Student8("유관순2", 99, 34));
// 1. 카운트
long count = list.stream().collect(Collectors.counting());
System.out.println("1. 카운트: " + count);
// 2. 영어점수 총합
int sum = list.stream().collect(Collectors.summingInt(t->t.getEng()));
System.out.println("2. 영어점수 총합: " + sum);
// 3. 영어점수 평균
double avg = list.stream().collect(Collectors.averagingDouble(t->t.getEng()));
System.out.println("3. 영어점수 평균: " + avg);
// 4. 영어점수 최대값
Optional<Student8> max = list.stream()
.collect(Collectors.maxBy(Comparator.comparing(Student8::getEng)));
Student8 sss = max.get();
System.out.println("4. 영어점수 최대값: " + sss);
// 5. 영어점수 최소값
Optional<Student8> min = list.stream()
.collect(Collectors.minBy(Comparator.comparing(Student8::getEng)));
Student8 sss2 = min.get();
System.out.println("5. 영어점수 최소값: " + sss2);
}// end main
}
'[study]이론정리 > JAVA(eclipse)' 카테고리의 다른 글
java 14 일차 _ 03. 스트림(중간처리) (0) | 2024.03.27 |
---|---|
java 14 일차 _ 02. 스트림 (0) | 2024.03.27 |
java 14 일차 _ 01. 메서드참조 (0) | 2024.03.27 |
java 13일차 _ 01. 제네릭스( generics ) / 컬렉션 API / 표준API함수형인터페이스 (0) | 2024.03.26 |
java 13 일차 _ 12일차 정리 (0) | 2024.03.26 |