성실한 사람이 되자

성실하게 글쓰자

This is spear

JAVA_SPRING/JAVA

자바 스트림(Java stream) - foreach() 메소드를 이용

Imaspear 2020. 8. 22. 17:07
728x90

 

스트림에 관한 설명은 이전 포스트를 확인하시면 됩니다. 

 

https://imspear.tistory.com/63

 

우선 데이터를 테스트할 수 있도록 DTO를 생성하겠습니다. 

 

 

 

DTO 생성 

public class StudentDTO {
	String name;
	int age;
	int score_ma;
	int score_en;
	
	
	public StudentDTO(String name, int age, int score_ma, int score_en) {
		super();
		this.name = name;
		this.age = age;
		this.score_ma = score_ma;
		this.score_en = score_en;
	}


	public String getName() {
		return name;
	}


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


	public int getAge() {
		return age;
	}


	public void setAge(int age) {
		this.age = age;
	}


	public int getScore_ma() {
		return score_ma;
	}


	public void setScore_ma(int score_ma) {
		this.score_ma = score_ma;
	}


	public int getScore_en() {
		return score_en;
	}


	public void setScore_en(int score_en) {
		this.score_en = score_en;
	}
	
	
}

 

main() 메소드를 이용하여 실행할 수 있도록 클래스를 하나 더 생성하도록 하겠습니다. 

 

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


public class StudentForEachSample {
	public static void main(String[] args) {
		StudentForEachSample sample = new StudentForEachSample();
		List<StudentDTO> list = new ArrayList<>();
		
		list.add(new StudentDTO("this", 19, 80, 80));
		list.add(new StudentDTO("is", 22, 80, 80));
		list.add(new StudentDTO("hi", 24, 90, 10));
		
		sample.printStudentName(list);
	}
	
	public void printStudentName(List<StudentDTO> students) {
		students.stream().forEach(student -> System.out.println(student.getName()));
	}
}

 

printStudentName() 메서드안에 forEach()를 이용하여 각 student의 이름을 출력하도록 만들었습니다. 

	public void printStudentName(List<StudentDTO> students) {
		students.stream().forEach(student -> System.out.println(student.getName()));
	}

 

단순한 for문을 이용한 방법입니다. 

 

위 printStudentName 과 다른 방법이지만 동일하게 결과를 출력할 수 있는 메소드를 생성할 수 있습니다. 물록 getAge() 메소드를 이용했으니 리턴 값은 나이 값이 순서대로 출력이 됩니다.  

	public void printStudentAge(List<StudentDTO> studens) {
		for(StudentDTO student:studens) System.out.println(student.getAge());
	}

 

map()메소드를 이용

 

이렇게 map()을 이용하면 DTO 객체를 이용하는 것이 아니라 student.getScore_en()의 결과인 String 값을 사용하는 것입니다. 여기서 주의할 점은 map() 이후에 나오는 메소드들은 List<StudentDTO>가 아닌 List<String>의 스트림을 처리하는 것입니다. 

	public void printStudentScoreEn(List<StudentDTO> students) {
		students.stream().map(student -> student.getScore_en()).forEach(score -> System.out.println(score));
	}

 

 

자바 Stream에서 foreach() 메서드를 사용해 데이터를 정렬 할 수 있는 많은 방법들을 사용했습니다. 만약 위의 메서드 안의 화살표 모향을 이해하지 못한다면 자바 버전 8 부터 나온 람다 표현식에 대해 찾아보시면 됩니다. 

https://imspear.tistory.com/62

 

자바 람다 표현식_자바 버전 8(Lambda expression in Java version 8)

Lambda 표현식 같은 경우는 Java version 8 이상부터 사용이 가능합니다. 자바 람다 표현식 클래스는 인터페이스에 메서드가 '하나'만 있어야 사용 가능하다는 점 꼭 유의해야 합니다. 자바 패키지에��

imspear.tistory.com

 

 

오늘은 여기까지~