stream
: 자바8부터 추가됨, 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
: 반복 요소를 순차적으로 처리하기
1) stream 과 iterator은 비슷한 역할을 하는 반복자
2) 람다식으로 요소를 처리하는 함수를 만든다
3) 내부 반복자 사용
외부 반복자: 개발자가 직접 컬렉션 요소를 반복하는 코드 패턴을 작성함 ex) for문, while문
내부 반복자: 컬렉션 내부에서 요소들을 반복 처리. 개발자는 처리 함수만 작성함.
java 7이전: Iterator 사용
package com.company;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class test16 {
public static void main(String[] args) {
List<String> list = Arrays.asList("A","B","C");
Iterator<String> iter = list.iterator();
while (iter.hasNext()){
String str = iter.next();//값 가져오기
System.out.println(str);
}
}
}
java 8 이후: stream 사용
list.stream();
package com.company;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class test16 {
public static void main(String[] args) {
List<String> list = Arrays.asList("A","B","C");
Stream<String> stream = list.stream();
stream.forEach(str -> System.out.println(str));
}
}
Stream.of(문자 배열)
package com.company;
import java.util.Arrays;
import java.util.stream.Stream;
public class Main2 {
public static void main(String[] args) {
int number = 12345;
int[] digits = Stream.of(String.valueOf(number).split("")).mapToInt(Integer::parseInt).toArray();
//mapToInt 왜 하는거야??
System.out.print( Arrays.toString(digits) ); // [1, 2, 3, 4, 5]
}
}
스트림 얻기
List<Student> list = new ArrayList<Student>(); Stream<Student> stream = list.stream();
String[] strArray = new String[]; Stream<String> strStream = Arrays.stream(strArray);
메소드
종류 | 리턴 | 메소드 | 설명 | |
중간처리 | 필터링 | Stream | distinct() | 중복 제거 |
filter( ... ) | 조건 필터링 | |||
매핑 | map( ... ) | |||
asDoubleStream() | int -> double long -> double |
|||
정렬 | sorted(...) | sorted() // 오름차순으로 정렬 sorted( (a,b) -> a.compareTo(b)) |
||
루핑 | peek(...) | peek() 스트림에서 마지막에서 호출하면 작동 안함 | ||
최종처리 | 매칭 | boolean | allMatch(...) | .allMatch(a-> a%2 ==0); //2의 배수인가? |
집계 | long | count() | ||
int, long, double | sum() | |||
max(...) | ||||
min(...) | ||||
루핑 | void | forEach(...) |
import java.util.Arrays;
import java.util.stream.IntStream;
class Solution {
public int solution(int[] numbers) {
//IntStream이 있네??
//noneMatch 함수가 있구나
return IntStream.range(0, 10).filter(i -> Arrays.stream(numbers).noneMatch(num -> i == num)).sum();
}
}
'알고리즘 > 알고리즘 개념 정리' 카테고리의 다른 글
[java] Array (0) | 2021.09.27 |
---|---|
[java] Math 클래스, String (0) | 2021.09.27 |
[java] Comparable, Comparator (0) | 2021.09.27 |
[java] Array, List, Set, Map (0) | 2021.09.26 |
[java] 형 변환 (0) | 2021.09.25 |