본문으로 바로가기

[Java] 자바 8 Stream API 루핑 (peek, forEach)

category Backend/Java 2022. 1. 7. 13:10

1. 루핑(Looping)

  • 루핑은 요소 전체를 반복하는 것을 말합니다.
  • 루핑 메소드에는 peek()와 forEach()가 있습니다.
  • 두 메소드는 기능적으로는 동일하지만, peek()는 중간 처리 메소드이고, forEach()는 최종 처리 메소드 입니다.

2. peek()

  • peek()는 중간 처리 메소드 입니다. 따라서 최종 처리 메소드가 호출되어야 동작합니다.
  • 전체 요소를 루핑 하면서 추가적인 작업을 위해서 사용합니다.
  • 필터링 후 남은 데이터 확인, 집계 시 사용된 데이터 출력 등과 같은 작업으로 쉽게 생각하면 미리 보기? 확인용? 같이 사용됩니다.

 

int[] intArr = {1,2,3,4,5,6,7,8,9};

int sum = Arrays.stream(intArr).peek(i -> System.out.print(i + " ")).sum();
System.out.println("sum: " + sum);

/*
[출력]
1 2 3 4 5 6 7 8 9 sum: 45
*/

3. forEach()

  • forEach()는 최종 처리 메소드 입니다.
  • 파이프라인 마지막에 루핑 하면서 요소를 하나씩 처리합니다.

int[]

int[] intArr = {1,2,3,4,5,6,7,8,9};

Arrays.stream(intArr).forEach(System.out::println);

 

List<String>

List<String> stringList = Arrays.asList(
        "A",
        "B",
        "C",
        "D",
        "E",
        "F"
);

stringList.stream().forEach(System.out::println);

 

List<DTO(VO)>

static class People {

    private String name;
    private int age;

    People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public String getName() {
        return name;
    }
}
List<People> peopleList = Arrays.asList(
        new People("김현수", 1),
        new People("나영민", 2),
        new People("임호연", 3),
        new People("신종엽", 4),
        new People("김기혁", 5),
        new People("안종호", 6),
        new People("하연수", 7),
        new People("장영호", 8)
);

peopleList.stream().forEach(p -> System.out.println(p.getName() + " : " + p.getAge()));