[Java] stream API 와 Optional

2023. 9. 26. 10:44·Programming Language/Java
목차
  1. 실무에서 자주 발생하는 상황에 stream API와 Optional 적용하기
  2. for + if로 처리하기 vs stream API + Optional로 처리하기
  3. for + if로 처리하기 
  4. stream API + Optional로 처리하기
  5. 아이디 중복 검사에 활용하기
  6. stream API 는 for 문 보다 느린가?
반응형

실무에서 자주 발생하는 상황에 stream API와 Optional 적용하기

 

백엔드 실무에서 자주 발생하는 일

  • 데이터에서 데이터를 조회한다.
  • 특정한 조건을 만족하는 데이터가 있는가?
    • 없다 -> 예외 발생!
    • 있다 -> 다음 작업 실행

 

 

 

 

for + if로 처리하기 vs stream API + Optional로 처리하기

list 에서 1234 를 찾는 과정을 살펴보겠다.

 

 

for + if로 처리하기 

public class ForAndIfFilterExampleMain {
public static void main(String[] args) {
int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> integerList = Arrays.stream(integerArray)
.boxed()
.toList();
Integer findNumber = null;
for (int i = 0; i < integerList.size(); i++) {
if(integerList.get(i).equals(1234)) {
findNumber = integerList.get(i);
break;
}
}
if(findNumber == null)
throw new RuntimeException();
System.out.println("findNumber=" + findNumber);
}
}

 

 

stream API + Optional로 처리하기

public class FilterExampleMain {
public static void main(String[] args) {
int[] integerArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> integerList = Arrays.stream(integerArray)
.boxed()
.toList();
Integer findNumber = integerList.stream()
.filter(integer -> {
if(integer.equals(1234))
return true;
return false;
})
.findAny()
.orElseThrow();
System.out.println("findNumber=" + findNumber);
}
}

 

stream API + Optional로 처리할 때 코드의 가독성이 더 좋지 않은가.

 

 

 

 

아이디 중복 검사에 활용하기

public class User {
private String id;
private String name;
public User(String id, String name) {
this.id = id;
this.name = name;
}
public boolean sameId(String idToFind) {
return this.id.equals(idToFind);
}
}
public class FindByLevelMain {
public static void main(String[] args) {
String idToFind = "programmers_user1";
List<User> list = new ArrayList<>();
list.add(new User("programmers_user1", "이준형"));
list.add(new User("programmers_user2", "푸"));
list.add(new User("programmers_user3", "foo"));
list.stream()
.filter(user -> user.sameId(idToFind))
.findAny()
.ifPresentOrElse(user -> {
throw new RuntimeException(idToFind + "는 이미 존재하는 아이디입니다.");
}, () -> {
System.out.println(idToFind + "는 사용할 수 있는 아이디입니다.");
});
}
}

보통 데이터가 없는 경우에 예외를 던지는 경우가 많다.

하지만 위 코드에서는 데이터가 있는 경우 데이터를 던지고 있다. 왜냐면 중복 검사이니까!

로직에 따라서 적절히 예외를 던지도록 하자.

 

 

stream API 는 for 문 보다 느린가?

경우에 따라 다르지만, 대체로 느릴 수 있다. 체감할 수 있는 정도는 아니다.

가독성 우선하여 개발 후 성능이 필요한 경우 튜닝하자.

 

 

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Programming Language > Java' 카테고리의 다른 글

[Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (1)  (0) 2023.09.27
[Java] 의존 관계에 대해 예제와 함께 알아보자.  (0) 2023.09.26
[Java] stream API를 예제와 함께 알아보자.  (0) 2023.09.26
[Java] if문이 너무 많다면, 리팩토링을 해보자.  (0) 2023.09.25
[Java] Optional - nullPointException을 잘 다뤄보자.  (0) 2023.09.25
  1. 실무에서 자주 발생하는 상황에 stream API와 Optional 적용하기
  2. for + if로 처리하기 vs stream API + Optional로 처리하기
  3. for + if로 처리하기 
  4. stream API + Optional로 처리하기
  5. 아이디 중복 검사에 활용하기
  6. stream API 는 for 문 보다 느린가?
'Programming Language/Java' 카테고리의 다른 글
  • [Java] 객체 지향 프로그래밍의 5가지 기본 원칙 SOLID 를 예제와 함께 알아 보자. (1)
  • [Java] 의존 관계에 대해 예제와 함께 알아보자.
  • [Java] stream API를 예제와 함께 알아보자.
  • [Java] if문이 너무 많다면, 리팩토링을 해보자.
Giken
Giken
𝐒𝐲𝐬𝐭𝐞𝐦.𝐨𝐮𝐭.𝐩𝐫𝐢𝐧𝐭𝐥𝐧("𝐇𝐞𝐥𝐥𝐨 𝐖𝐨𝐫𝐥𝐝!");
  • Giken
    개발자 기켄
    Giken
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Programming Language (26)
        • C (3)
        • C++ (2)
        • Java (19)
      • Web (4)
      • Database (1)
        • SQL (5)
      • Spring (10)
      • PHP (7)
      • Linux (1)
      • Server (1)
      • Infra (3)
      • Algorithm (74)
        • 백준 (71)
        • 프로그래머스 (0)
      • 프로젝트 (2)
      • Etc (8)
      • 낙서 (5)
  • 블로그 메뉴

    • GitHub
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    2588
    윤년
    2753
    1330
    C
    평년
    SQL
    9498
    SQL고득점키트
    프로그래머스
    DB
    백준
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Giken
[Java] stream API 와 Optional

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.