728x90
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
출처: https://isntyet.github.io/java/java-stream-%EC%A0%95%EB%A6%AC(filter)
728x90
'JAVA' 카테고리의 다른 글
GSON 라이브러리에 대해(편리한 JSON 변환에 관해) (0) | 2022.09.15 |
---|---|
Java 엑셀 파일(Excel) 다운로드 (0) | 2022.09.05 |
HashMap 사용 방법 및 예제 (0) | 2022.08.16 |
ZonedDateTime과 LocalDateTime의 차이 (0) | 2022.08.05 |
ArrayList 중복 값 개수 세기(부제: Map 자료구조) (0) | 2022.07.11 |