지난번에 JAVA Stream에 대한 정의를 살펴보았고, 오늘은 실제 사용 코드와 기능들에 대해 정리할 것이다
1. 스트림 생성
1.1 컬렉션
Collection에 stream() 이 정의되어 있으므로 Collection의 자손인 List와 Set을 구현한 클래스들은 모두 stream()으로 생성가능
Stream<T> Collection.stream()
// List로부터 스트림 생성
List<Integer> list = Arrays.asList(1,2,3,4,5);
Stream<Integer> intStream = list.stream(); // list를 소스로 하는 컬렉션 생성
1.2 배열
Stream과 Arrays에 static메서드로 정의되어 있다.
Stream<T> Stream.of(T... values) // 가변 인자
Stream<T> Stream.of(T[])
Stream<T> Arrays.stream(T[])
Stream<T> Arrays.stream(T[] array, int startInclusive, int endExclusive)
ex) 문자열 스트림
Stream<String> strStream = Stream.of("a","b","c"); // 가변인자
Stream<String> strStream = Stream.of(new String[]{"a","b","c"});
Stream<String> strStream = Arrays.stream(new String[]{"a","b","c"});
Stream<String> strStream = Arrays.stream(new String[]{"a","b","c"}, 0, 3);
int, long, double과 같은 기본형 배열을 소스로 하는 스트림 생성도 가능
IntStream IntStream.of(int...values)
이런 식으로!
1.3 특정 범위의 정수
IntStream intStream = IntStream.range(1, 5); // 1,2,3,4
IntStream intStream = IntStream.rangeClosed(1, 5) // 1,2,3,4,5
...
이 외에도 임의의 수, 람다식, 빈스트림 등으로 생성 가능하다. 이와 관련된 정보는 앞의 게시물 출처에 나와있으니 참고해야지!
2. 스트림 중간 연산
2.1 스트림 자르기
Stream skip(long n) // 처음 n개의 요소 건너뛰기
Strema limit(long maxSize) // 스트림의 요소를 maxSize개로 제한
2.2 스트림 요소 걸러내기
distinct()는 스트림에서 중복된 요소들 제거
filter()는 주어진 조건(Predicate)에 맞지 않는 요소를 걸러낸다.
// distinct()
IntStream exampleStream = IntStream.of(1,2,2,3,3,3,4,5,5,6);
exampleStream.distinct().forEach(System.out::print); // 123456
// filter()
IntStream example2Stream = IntStream.rangeClosed(1, 10);
example2Stream.filter(i -> i%2 ==0).forEach(System.out::print); // 246810
// filter()를 다른 조건으로 여러 번 사용. 두 문장의 결과는 같다.
example2Stream.filter(i -> i%2!=0 && i%3!=0).forEach(System.out::print); //157
example2Stream.filter(i -> i%2!=0).filter(i -> i%3!=0).forEach(System.out::print);
2.3 스트림 정렬
Stream sorted()
Stream sorted(Comparator<? super T> comparator)
Stream<String> strStream = Stream.of("dd","aaa","CC","cc","b");
strStream.sorted().forEach(System.out::print); // CCaaabccdd
// 기본정렬 역순
strStream.sorted(Comparator.reverseOrder());
// 대소문자 구분 없이
strStream.sorted(String.CASE_INSESITIVE_ORDER)
// 길이 순 정렬
strStream.sorted(Comparator.comparing(String::length))
//정렬 조건을 추가할 때는 thenComparing() 사용
studentStream.sorted(Comparator.comparing(Student::getBan)
.thenComparing(Student::getTotalScore)
.thenComparing(Student::getName)
.forEach(System.out::println);
return IntStream.rangeClosed(0, n).filter(value -> value % 2 == 1).toArray();
이 Stream 문법을 적용하고 이 코드를 보면,
기본형 정수 배열을 소스로 한 stream에서 0부터 n까지의 정수를 다루는데 filter 메소드를 사용하여 값이 홀수인 것을 추출하여 배열로 다시 만드는 코드임을 알 수 있다!
'Algorithms' 카테고리의 다른 글
Programmers Day 7 (0) | 2023.07.18 |
---|---|
Programmers Day 6 (0) | 2023.07.17 |
Programmers Day 5 (0) | 2023.07.11 |
Programmers Day 4 (0) | 2023.07.09 |
Programmers Day 3 (0) | 2023.07.09 |