티스토리 뷰
반응형
무작위로 0에서 99까지의 숫자들 중 10개를 뽑아서 오름차순으로 정렬한 뒤 출력하는 함수를 작성해 봅시다. 다음과 같은 코드를 만들 수 있겠죠.
public void printRandomNumbers() {
Set<Integer> cache = new HashSet<>();
List<Integer> result = new ArrayList<>();
while(result.size() < 10) {
int number = (int) (Math.random() * 100);
if (cache.contains(number)) {
continue;
}
cache.add(number);
result.add(number);
}
Collections.sort(result);
for (int number : result) {
System.out.println(number);
}
}
하지만 자바8 부터는 Stream 을 사용해서 다음과 같이 간단하게 표현 가능합니다
public void printRandomNumbers() {
Stream.generate(() -> (int) (Math.random() * 100))
.distinct()
.limit(10)
.sorted()
.forEach(System.out::println);
}
먼저 generate 메소드가 눈에 띕니다. 이 메소드는 argument로 함수를 받습니다. 함수에서 리턴되는 객체가 스트림으로 생성되는 것이죠. 함수는 무한히 호출되기 때문에 무한한 길이의 스트림이 생성됩니다. 그렇기 때문에 limit 메서드와 항상 함께 사용해야 합니다. limit 메소드는 스트림에서 일정 개수만 가져와서 새로운 스트림으로 리턴해 주는 역할을 합니다.
distinct 메소드는 중복되는 아이템들을 모두 제거해주고 새로운 스트림을 반환합니다. 번거로운 중복 체크 코드를 사용하지 않아도 되는 것이죠. 그리고 마지막으로 sorted 메소드는 정렬된 스트림을 반환하게 됩니다.
반응형
'language > JAVA' 카테고리의 다른 글
생성자나 열거타입으로 싱글턴임을 보증하라 (0) | 2021.01.29 |
---|---|
[이펙티브 자바] 생성자 대신 정적 팩터리 메서드를 고려하라 (0) | 2021.01.28 |
JAVA Enum(열거 타입) 값 비교하기 (0) | 2021.01.22 |
자바(JAVA)에서 배열(Arrays), 리스트(List) 정렬하기 (0) | 2021.01.22 |
JAVA 인터페이스(Interface) 다중상속 시 메서드 충돌 해결하기 (1) | 2021.01.22 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- GROUP BY
- 자바스크립트 개론
- 로그
- Markov
- REST API
- java
- 경고
- Count
- html
- 마르코프 연쇄
- RESTful
- 코딩의 기술
- CONVENTIONS
- 유지보수
- restful api
- 동적계획법
- 문장 생성기
- markov chain
- Spring in Action
- 마르코프
- 클린코드
- 디자인패턴
- was
- DP
- 전략패턴
- 크롬
- 야근
- 자바스크립트개론
- 몰라서망신
- Warning
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함