본문 바로가기

알고리즘/알고리즘 개념 정리

[java] stream

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