인프런 커뮤니티 질문&답변

김기석님의 프로필 이미지
김기석

작성한 질문수

나도코딩의 자바 기본편 - 풀코스 (20시간)

스트림 (연장 전반전)

스트림 문법 사용 중 중간 연산을 두 번 사용하는 것과 And를 통해서 중간 연산을 한 번만 하는 것이 다른 걸까요?

작성

·

237

0

// 중간 연산 한 번 사용으로 And 연산 사용하기
langList.stream().filter(x -> x.length() <= 4 && x.contains("c")).forEach(System.out::println);
System.out.println("-----------------------------");

// 중간 연산 두 번 사용
langList.stream().filter(x -> x.length() <= 4 && x.contains("c")).forEach(System.out::println);
System.out.println("-----------------------------");

-> 궁금해서 해보다가 And 연사자를 사용하는 것도 되더라고요.

위에 나와있는 두 개의 코드 모두 사용해도 상관없는 지와 어떤 것을 사용하는 것이 더 좋다고 할 수 있는지 궁금합니다

 

 

답변 1

1

나도코딩님의 프로필 이미지
나도코딩
지식공유자

안녕하세요?
자바 스트림에서 중간 연산을 두 번 사용하는 것과 And (&&) 연산자를 통해서 중간 연산을 한 번만 사용하는 것은 기능적으로 동일합니다. 두 가지 접근 방식은 동일한 결과를 생성하며, 각각의 방법은 스트림의 요소를 필터링하기 위해 사용될 수 있습니다.

// 중간 연산 한 번 사용으로 And 연산 사용하기
langList.stream().filter(x -> x.length() <= 4 
    && x.contains("c")).forEach(System.out::println);
System.out.println("-----------------------------");
// 중간 연산 두 번 사용
langList.stream().filter(x -> x.length() <= 4)
    .filter(x -> x.contains("c")).forEach(System.out::println);
System.out.println("-----------------------------");

첫 번째 코드 예제에서는 And (&&) 연산자를 사용하여 코드를 더 간결하게 만들 수 있으며, 중간 연산을 한 번만 사용하므로 스트림의 요소를 한 번만 반복하게 됩니다. 반면 두 번째 코드 예제에서는 중간 연산을 두 번 사용하므로 스트림의 요소를 두 번 반복하게 됩니다. 그러나 이 정도의 성능 차이는 무시할 수 있을 정도로 작으며, 코드의 가독성과 쉬운 유지 보수를 위해 어떤 방법이 좋을지 결정하면 됩니다.

정리하면, 두 가지 방법 중 어느 것을 선택하든 결과는 동일하므로 편하신 방법을 사용하시면 되겠습니다 😊
감사합니다.

김기석님의 프로필 이미지
김기석

작성한 질문수

질문하기