JAVA

stream

잔망루피 2021. 10. 13. 18:36

stream은 배열이나 컬렉션 등을 모두 같은 방식으로 다룰 수 있게 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다.

 

 

🧡 stream의 특징

1. 데이터 소스를 변경하지 않는다.

2. 일회용이다.

3. 작업을 내부 반복으로 처리한다.

  • 내부 반복은 반복문을 메서드의 내부에 숨길 수 있는 것이다.
  • forEach()는 매개변수에 대입된 람다식을 데이터 소스의 모든 요소에 적용

 

 

🦔 stream  생성

Stream<T> Collection.stream()

컬렉션의 스트림 생성

TInteger 또는 String 같은 타입

Collection에는 list, set 같은 컬렉션

 

IntStream IntStream.of(int... values)
IntStream IntStream.of(int[])
IntStream Arrays.stream(int[])
IntStream Arrays.stream(int[] array, int startInclusive, int endExclusive)

기본형 배열의 스트림

 

 

🎀 데이터 소스의 요소를 기본형으로 다루는 스트림

IntStream
LongStream
DoubleStream

 

 

🎨 스트림 중간 연산

Stream<T> filter(Predicate<T> predicate) 조건에 안 맞는 요소 제외
IntStream mapToInt(ToIntFunction<T> mapper) 스트림의 요소 변환
boolean anyMatch(Predicate<T> P) 조건을 하나라도 만족하는지

 

 

😺 스트림 메소드

long count() 스트림에서 요소의 갯수를 반환

 

 

 

🍨 anyMatch 사용하기

  • 이중 for문이라고 생각하면 된다.
public void checkSeat(MakeReservationRequest makeReservationRequest) {
        List<Reservation> reservationList =
                reservationRepository.findListByFundingIdAndStatus(
                        makeReservationRequest.getFundingId(), 1);

        List<Seat> requestSeat = makeReservationRequest.getSeats().getSeat();

        List<Seat> seatList =
                reservationList.stream()
                        .map(reservation -> reservation.getSeats().getSeat())
                        .flatMap(inner -> inner.stream())
                        .collect(Collectors.toList());

        Optional<Seat> result = requestSeat.stream()
                        .filter(seat ->seatList.stream().anyMatch(Predicate.isEqual(seat)))
                                .findFirst();
//                                        seat.equals(
//                                                seatList.stream()
//                                                        .anyMatch(Predicate.isEqual(seat))))
//                        .findFirst();

        //                        .filter(seat -> seat.equals(seatList.stream()
        //                                .map(seat1 -> new Seat(seat1.getLine(), seat1.getCol()))))
        ////                .map(seat1 -> new Seat(seat1.getLine(),seat1.getCol()))))
        //                        .findFirst();

        if (result.isPresent()) {
            throw new BadRequestException(CustomExceptionStatus.RESERVATION_SEAT);
        }
    }

 

 

 


참고 👉 자바의 정석 3판

 

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

 

Stream (Java Platform SE 8 )

A sequence of elements supporting sequential and parallel aggregate operations. The following example illustrates an aggregate operation using Stream and IntStream: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight())

docs.oracle.com

 

반응형

'JAVA' 카테고리의 다른 글

Build  (0) 2022.04.29
Character  (0) 2021.10.24
char  (0) 2021.09.07
StringTokenizer  (0) 2021.09.01
Scanner  (0) 2021.08.29