[Java] Stream 만들기

이지현·2023년 4월 10일
0

Java

목록 보기
34/46
post-thumbnail

✔️ Stream 만들기

컬렉션

Stream<T> Collection.stream()
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> intStream = list.stream();

배열

String[] strArr = {"aaa", "ddd", "ccc"};

Stream<String> strStream = Stream.of(strArr);
Stream<String> strStream = Arrays.stream(strArr);

특정 범위의 정수

IntStream intStream = IntStream.range(1, 5);
IntStream intStream = IntStream.rangeClose(1, 5);

람다식

Stream 클래스의 iterate(), generate()는 람다식을 매개변수로 받아서 이 람다식에 의해 계산되는 결과값들을 요소로 하는 무한 스트림을 생성함

  • iterate() : 이전 결과에 대해 종속적
Stream<Integer> evenStream = Stream.iterate(0, n -> n+2);
  • generate() : 이전 결과에 대해 독립적
Stream<Double> randomStream = Stream.generate(Mate::random);

1. 스트림의 중간연산

중간연산설명
Stream < T > distinct()중복제거
Stream < T > filter(Predicate < T > predicate조건에 안 맞는 요소 제외
Stream < T > limit(long maxSize)스트림의 일부 잘라내기
Stream < T > skip(ling n)스트림의 일부 건너뛰기
Stream < T > peek(Consumer< T > action)스트림의 요소에 작업수행
Stream < T > sorted()스트림의 요소 정렬
Stream<String> strStream = Stream.of("dd", "aaa", "CC", "cc", "b");
strStream.sorted().forEach(System.out::print);

변환 - map()

  • 스트림의 요소에 저장된 값 중에서 원하는 필드만 뽑아내거나 특정 형태로 변환해야할 때 사용
    DoubleStream mapToDouble (ToDoubleFunction < T > mapper)
    IntStream mapToInt (ToIntFunction < T > mapper)
    LongStream mapToLong (ToLongFunction < T > mapper)

  • mapToObj(), boxed()
    반대로 IntStream을 Stream < T >로 변환할 때는 mapToObj()를, Stream로 변환할 때는 boxed()를 사용함

  • flatMap : Stream < T [] >를 Stream < T >로 다루는 것이 편리할 때 사용
    DoubleStream flatMapToDouble (Function< T, DoubleStream > mapper)
    IntStream flatMapToInt (Function< T, IntStream > mapper)
    LongStream flatMapToLong (Function< T, LongStream > mapper)

2. Optional< T >와 OptionalInt

  • 지네릭 클래스로 T 타입의 객체를 감싸는 래퍼 클래스
  • Optional 타입의 개체에는 모든 타입의 참조변수를 담을 수 있음
  • 반환된 결과가 null인지 매번 if문으로 체크하지 않아도 됨
Optional 객체 생성
String str = "abc";
Optional <String> optVal = Optional.of(str);

참조변수의 값이 null일 가능성이 있으면 of()대신(NullPointerException 발생) ofNullable()을 사용해야 함

Optional <String> optVal = Optional.ofNullable(null);
Optional < T > 참조변수의 초기화
Optional <String> optVal = null; // null로 초기화
Optional <String> optVal = Optional.<String>empty; // 빈 객체로 초기화
Optional 객체의 값 가져오기
Optional<String> optVal = Optional.of("abc");

String str1 = optVal.get(); // optVal에 저장된 값을 반환. null이면 예외발생 

String str2 = optVal.orElse(""); // optVal에 저장된 값이 null일 때는, ""를 반환 

String str3 = optVal.orElseGet(String::new); // 람다식 사용가능 () -> new String()

String str4 = optVal.orElseThrow(NullPointerException::new); // 널이면 예외발생
isPresent()
if(Optional.ofNullable(str).isPresent()) { // 값이 null이면 fasle, 아니면 true 반환
  System.out.println(str);
}

2. 스트림의 최종연산

최종연산설명
void forEach(Consumer <? super T> action)각 요소에 지정된 작업 수행
long count()스트림의 요소 개수
Optional < T > max (Comparator <? super T> comparator)스트림의 최댓값
Optional < T > min (Comparator <? super T> comparator)스트림의 최솟값
Optional < T > findAny()아무거나 하나
Optional < T > findFirst()첫번째 요소
boolean allMatch(Pradicate < T > p)모두 만족하는지?
boolean anyMatch(Pradicate < T > p)하나라도 만족하는지?
boolean noneMatch(Pradicate < T > p)모두 만족하지 않는지?
Object[] toArray()스트림의 모든 요소를 배열로 return
profile
2022.08 ~ 2023.09 / 현재 티스토리 이전 : https://jihyun-devstory.tistory.com/

0개의 댓글