스퐁지송 개발노트

22.12.05(월) 스트림 본문

JAVA 입문 시작

22.12.05(월) 스트림

강준석 2022. 12. 5. 15:20
728x90

컬렉션 프레임워크(배열)

컬렉션 프레임워크(배열) 의 각각의 요소를 하나씩 참조해서 람다식으로 처리

표준화를 하기위해 사용

-원본을 변경하지 않음

-for => 외부반복이라함 / 스트림 => 내부반복을 함

-재사용 불가

-병렬 처리 지원

 

처리순서

1.생성 

2.가공(중개 연산 - 변환작업)

3.결과

 

예시

 

package 스트림;

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Main {

	public static void main(String[] args) {
		
		List<String> list = Arrays.asList(new String[] { "홍", "김", "이", "유" });
		//컬랙션 프레임위크 생성
		int i=0;
		System.out.println("for문 이용");
		for(i=0;i<list.size();i++) {
			System.out.println(list.get(i));	
            //list(i)번 방을 가져와서 출력 상대적으로 느림 for문이랑 같이 처리 하기때문에
		}
		
      
		System.out.println("외부 반복자 이용");
		Iterator<String> it = list.iterator();	//Iterator = 반복자,list set map 다 사용가능
		while(it.hasNext()) {
		//hasNext = it배열의 0번방부터 다음방에 내용이있으면 true
        //없으면 false true면 반복(while문이기 때문에 참/거짓으로)
			System.out.println(it.next());
		}
		//forEach 반복메서드
		System.out.println("내부 반복자 이용");
		list.stream().forEach(s -> System.out.println(s)); //list배열내부에서 자동으로 처리
		
	
	}

}

 

결과

 

for문 이용




외부 반복자 이용




내부 반복자 이용



 

예제1)

서브문

package 스트림;

public class Student {

	String name;
	int score;

	public Student(String name, int score) {
		super();
		this.name = name;
		this.score = score;
		
		
	}

	public String getName() {
		return name;
	}

	public int getScore() {
		return score;
	}

}

 

 

메인문

 

package 스트림;

import java.util.Arrays;
import java.util.List;

public class Sample04 {

	public static void main(String[] args) {
		
		List<Student> list = Arrays.asList(
				new Student("티모",90),
				new Student("마스터이",70),
				new Student("베인",88)	
				);
		
		double avg = list.stream().mapToInt(Student::getScore)
								  .average()
								  .getAsDouble();
		
		System.out.println("평균 : "+ avg);
	}

}

평균 : 82.66666666666667

 

 

예제2

 

 

package 스트림;

import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class Sample05 {
	static int sum=0;
	public static void main(String[] args) {

		String[] arr = { "마이", "티모", "베인", "애쉬" };
			
		Stream<String> s1 = Arrays.stream(arr);	//배열을 스트림으로 만드는 작업
		//Stream<String> stream = list.stream():
		s1.forEach(a->System.out.print(a + " ")); //반복문
		
		System.out.println();
		
		//배열 특정 방 출력
		Stream<String> s2 = Arrays.stream(arr, 1, 4); //(arr배열방의 1이상4미만의 방)
		s2.forEach(a->System.out.print(a + " "));
		
		System.out.println();
		//1~100합계구하기		
		IntStream s3 = IntStream.rangeClosed(1,100);
		s3.forEach(n -> sum += n);		//반복문
		System.out.println("합 : "+ sum);
			
	}
}

 

마이 티모 베인 애쉬 
티모 베인 애쉬 
합 : 5050

728x90
Comments