본문 바로가기
Programming/JAVA(eclipse)

java 14 일차 _ 04. 스트림(최종처리)

by yoon9i 2024. 3. 27.

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
}