까마귀코딩 2023. 1. 17. 20:17
 
 

java stream 정리(filter)

 1 minute read


Filter

스트림내 요소에 대해서 필터링하는 작업


준비하기

java stream을 사용하는데 아직 미숙한것 같아서 여러가지 예제를 사용해보며 연습해보자.

  • sample data (Human)
번호이름가진돈생일
1 jojae 2900 1991-02-26
2 haha 1000 2003-03-02
3 arabia 30000 2001-04-06
4 cici 150 1982-05-16
5 zzang 40000 1910-06-26
6 ssu 200000 2012-07-11
7 kuku 150 1991-02-27
public class Human {
    private Long idx;
    private String name;
    private Integer money;
    private LocalDate birth;
}

기본 사용법

@DisplayName("이름이 zzang인 사람")
void filterTest1() {
    Human human = humans.stream()
        .filter(h -> h.getName().equals("zzang"))
        .findFirst()
        .orElseThrow(() -> new IllegalArgumentException());

    System.out.println(human.getIdx());
}
  • 결과
    5
    

메소드 참조 사용법

이름이 zz로 시작하는 사람을 찾을때
h -> h.getName().startsWith("zz")
대신
Human::isNameStartwithZz
이렇게 해당 메소드가 정의되어있다면 메소드 참조를 사용해서 간략하게 필터링 가능

@DisplayName("이름이 zz로 시작하는 사람(메소드 참조 사용)")
void filterTest2() {
    Human human = humans.stream()
        .filter(Human::isNameStartwithZz)
        .findFirst()
        .orElseThrow(() -> new IllegalArgumentException());

    System.out.println(human.getIdx());
}
  • 결과
    5
    

조건에 맞는 여러요소 가져오기

findFirst() 는 조건에맞는 첫번째 요소를 가져오지만
전부를 가져오고 싶으면 사용하지 않으면됨.

collect(Collectors.toList());
를 이용해서 List로 반환 가능.

@DisplayName("돈이 2000원 이상인 사람 전부")
void filterTest3() {
    List<Human> tmpHumans = humans.stream()
            .filter(h -> h.getMoney() > 2000)
            .collect(Collectors.toList());

    for (Human human : tmpHumans) {
        System.out.println(human.getIdx());
    }
}
  • 결과
    1
    3
    5
    6
    

여러조건에 맞는 여러요소 가져오기

@DisplayName("이름이 zzang이고 돈이 2000원 이상인 사람")
void filterTest4() {
    List<Human> tmpHumans = humans.stream()
            .filter(h -> "zzang".equals(h.getName()) && h.getMoney() > 2000)
            .collect(Collectors.toList());

    for (Human human : tmpHumans) {
        System.out.println(human.getIdx());
    }
}
  • 결과
    5
    

 Tags: java stream

 Categories: java

 Updated: May 30, 2020

 Twitter  Facebook  LinkedInPreviousNext

COMMENTS

YOU MAY ALSO ENJOY

feign client 사용해보기

 5 minute read

Feign은 Http Client 도구인데 example을 보는 순간 직관적인 형태에 끌려 사용해보게 되었다. (RestTemplate, WebClient 등을 쓰다가 Feign을 써보게 되면 Feign만 쓰게될꺼다) Feign은 인터페이스와 annotation을 이용하여 아주 간...

Spring boot Timezone 설정하기

 1 minute read

로컬에서는 분명히 적상적으로 작동을 했는데 서버 올라갔을 때 비정상으로 작동하여 원인을 확인해 보니 타임존 문제였다.

TestContainers로 test 멱등성 높이기

 3 minute read

h2 in-memory db에서 테스트를 하였는데 뭔가 이상했다. production환경에서 사용중인 mariadb로 배포 전에 혹시나 해서 테스트해보기 위해 로컬에서 docker로 mariadb를 띄워서 테스트를 했을 때와 결과가 달랐다….

db character set 바꾸기

 1 minute read

Spring 어플리케이션에서 maria db의 varchar type의 컬럼에 이모티콘(🍯)을 insert하려 했더니 SQLDataException Incorrect string value: '\xF0\x9F\x8D\xAF'.... 요런 에러가 발생했다. 저 이상한 형식의 str...