Java 람다와 스트림 04 (23.05.09)

Jane·2023년 5월 9일
0

IT 수업 정리

목록 보기
120/124

1. 스트림 함수 사용하기

1-1. sum()

// 1부터 10까지의 합
int sum = IntStream.rangeClosed(1,10).sum();
System.out.println(sum);
		
// 1부터 100까지의 합
System.out.println(IntStream.rangeClosed(1,100).sum());
		
// 1부터 1000까지의 합
System.out.println(IntStream.rangeClosed(1,1000).sum());

1-2. sum() + filter()

	public static void main(String[] args) {
	// 1부터 100까지의 짝수의 합
		int sum = IntStream.rangeClosed(1, 100).filter(i -> i % 2 == 0).sum();
		System.out.println(sum);
        
    // 1부터 100까지의 홀수의 합
    	sum = IntStream.rangeClosed(1, 100).filter(i -> i % 2 == 1).sum();
		System.out.println(sum);
	}

1-3. map()

	// 짝수를 걸러내고 곱하기 2한 값을 출력
		IntStream.rangeClosed(1, 10).filter(i -> i % 2 == 0).map(i -> i*2).forEach(System.out::println);

	// 짝수를 걸러내고 곱하기 2한 값을 모두 더하기
		int sum = IntStream.rangeClosed(1, 10).filter(i -> i % 2 == 0).map(i -> i*2).sum();
		System.out.println(sum);

2. Grade 객체와 스트림 사용

Grade.java

class Grade{
	private String name;
	private int kor;
	private int eng;
	private int math;
	
	public Grade() {}
	
	public Grade(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}
	
	public String getName() {
		return name;
	}
	public int getKor() {
		return kor;
	}
	public int getEng() {
		return eng;
	}
	public int getMath() {
		return math;
	}
	public void setName(String name) {
		this.name = name;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public void setMath(int math) {
		this.math = math;
	}
}
  • 리스트 이름 출력하기
	public static void main(String[] args) {
		List<Grade> gradeList = new ArrayList<Grade>();
		gradeList.add(new Grade("김민식", 70,80,90));
		gradeList.add(new Grade("김태우", 75,70,85));
		gradeList.add(new Grade("김원중", 80,40,75));
		
		// 리스트에 있는 사람들 출력하기
		gradeList.stream().forEach(grade -> System.out.println(grade.getName()));
	}
  • 리스트에 있는 사람들의 평균 구하기

	public static void main(String[] args) {
		List<Grade> gradeList = new ArrayList<Grade>();
		gradeList.add(new Grade("김민식", 70,80,90));
		gradeList.add(new Grade("김태우", 75,70,85));
		gradeList.add(new Grade("김원중", 80,40,75));
		
		// 리스트에 있는 사람들 출력하기
		gradeList.stream().forEach(
				grade ->{
					double avg = (grade.getKor() + grade.getEng() + grade.getMath()) / 3.0;
					System.out.println(grade.getName() + " : " + avg);
			}
		);
	}
  • Grade 객체에 정리하고 함수 정리하기
package java_lambda_example_stream;

import java.util.ArrayList;
import java.util.List;

class Grade {
	private String name;
	private int kor;
	private int eng;
	private int math;

	public Grade() {
	}

	public Grade(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
	}

	public String getName() {
		return name;
	}

	public int getKor() {
		return kor;
	}

	public int getEng() {
		return eng;
	}

	public int getMath() {
		return math;
	}

	public void setName(String name) {
		this.name = name;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public void setMath(int math) {
		this.math = math;
	}

	public double getAvg() {
		return (kor + eng + math) / 3.0;
	}
}

public class stream_example {

	public static void main(String[] args) {
		List<Grade> gradeList = new ArrayList<Grade>();
		gradeList.add(new Grade("김민식", 70, 80, 90));
		gradeList.add(new Grade("김태우", 75, 70, 85));
		gradeList.add(new Grade("김원중", 80, 40, 75));

		// 리스트에 있는 사람들 출력하기
		gradeList.stream().forEach(grade -> {
		//	double avg = (grade.getKor() + grade.getEng() + grade.getMath()) / 3.0;
			System.out.println(grade.getName() + " : " + grade.getAvg());
		});
	}

}

3. 스트림을 이용하여 해당 조건은 출력하지 않기

  • 이름을 체크하는 필터를 사용하여 보여주기
	public static void main(String[] args) {
		List<Grade> gradeList = new ArrayList<Grade>();
		gradeList.add(new Grade("김민식", 70, 80, 90));
		gradeList.add(new Grade("김태우", 75, 70, 85));
		gradeList.add(new Grade("김원중", 80, 40, 75));
		gradeList.add(new Grade("구자욱", 60, 50, 80));

	//  김을 포함한 사람만 출력
		gradeList.stream().filter(grade-> grade.getName().contains("김")).forEach(grade -> {
		
		System.out.println(grade.getName() + " : " + grade.getAvg());
		});
    // 구를 포함한 사람은 제외    
        gradeList.stream().filter(grade-> !grade.getName().contains("구")).forEach(grade -> {
		
		System.out.println(grade.getName() + " : " + grade.getAvg());
		});

	}
  • 국어 점수가 70을 넘는 사람만 출력
	public static void main(String[] args) {
		List<Grade> gradeList = new ArrayList<Grade>();
		gradeList.add(new Grade("김민식", 70, 80, 90));
		gradeList.add(new Grade("김태우", 75, 70, 85));
		gradeList.add(new Grade("김원중", 80, 40, 75));
		gradeList.add(new Grade("구자욱", 60, 50, 80));

		gradeList.stream().filter(grade-> grade.getKor() >70).forEach(grade -> {
		
			System.out.println(grade.getName() + " : " + grade.getAvg());
		});

	}
profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글