• Home
  • About
    • ming photo

      ming

      studying

    • Learn More
    • Twitter
    • Facebook
    • Instagram
    • Github
    • Steam
  • Archive
    • All Posts
    • All Tags
    • All categories
  • categories
    • HTML+CSS+JavaScript
    • JAVA
    • Algorithm
    • DB
    • JSP
    • 정보처리기사
    • Spring
    • Thymeleaf
    • 기술면접
  • Projects

JAVA-자바의정석Ch14(람다와스트림)-15~16,17~22

08 Mar 2021

🔶 자바의정석Ch14(람다와스트림)-15~16,17~22

✔ 자바의정석Ch14-15 스트림(Stream)

- 스트림 : 다양한 데이터 소스(컬렉션,배열)를 표준화(CF - list,set,map)된 방법으로 다루기 위한 것
         => 데이터의 연속적인 흐름 ![스트림](https://user-images.githubusercontent.com/65608960/110280456-2e5aaa00-801e-11eb-8f0d-ce4a3d2371e1.JPG)

- 스트림이 제공하는 기능 : 중간 연산 & 최종 연산
    1) 중간 연산 : 연산결과가 스트림인 연산, 반복적으로 적용 가능하다
    2) 최종 연산 : 연산결과가 스트림이 아닌 연산, 단 한번만 적용가능하다(스트림의 요소를 소모한다) ![자바의정석_스트림2](https://user-images.githubusercontent.com/65608960/110280453-2d297d00-801e-11eb-8be0-a3ed9945982e.JPG)

✔ 자바의정석Ch14-16 스트림(Stream)의 특징

🎈 스트림(Stream)의 특징 (1/3)

- 스트림은 데이터 소스로부터 데이터를 읽기만 할 뿐 변경하지 않는다 => Read Only , 원본 변경 없음
- 스트림은 Iterator 처럼 일회용이다(필요하면 다시 스트림을 생성해야 한다)
- 최종 연산 전까지 중간연산이 수행되지 않는다 => 지연된 연산 ![자바의정석_스트림특징_1](https://user-images.githubusercontent.com/65608960/110281369-f05e8580-801f-11eb-9ec1-d2ba828df3d6.JPG)

🎈 스트림(Stream)의 특징 (2/3)

- 스트림은 작업을 내부 반복으로 처리한다  ![자바의정석_스트림특징_2](https://user-images.githubusercontent.com/65608960/110281366-ef2d5880-801f-11eb-9237-32c5ac184bef.JPG)

🎈 스트림(Stream)의 특징 (3/3)

- 스트림의 작업을 병렬로 처리한다 => 병렬스트림 
- 기본형 스트림 : IntStream, LongStream, DoubleStream
    1) 오토박싱&언박싱의 비효율이 제거된다(Stream<Integer>대신 IntStream 사용)
    2) 숫자와 관련된 유용한 메서드를 Stream<T> 보다 더 많이 제공한다 ![자바의정석_스트림특징_3](https://user-images.githubusercontent.com/65608960/110281370-f0f71c00-801f-11eb-80b9-9615980a09f8.JPG)

✔ 자바의정석Ch14-17 스트림 만들기 - 컬렉션

- Collection 인터페이스(list,set)의 stream()으로 컬렉션을 스트림으로 변환 ![자바의정석_14-17](https://user-images.githubusercontent.com/65608960/110281812-bcd02b00-8020-11eb-96d7-61792bda026d.JPG)
  • EX
      package Java_Nam;
    
      import java.util.Arrays;
      import java.util.List;
      import java.util.stream.Stream;
    
      public class StreamEx {
    
          public static void main(String[] args) {
                
              // 리스트 생성
              List<Integer> list = Arrays.asList(1,2,3,4,5); 
                
              // 리스트 -> 스트림 => list를 데이터 소스로 하는 새로운 스트림 생성
              Stream<Integer> intStream = list.stream();
                
              // 스트림요소 출력
              intStream.forEach(System.out::print); // forEach : 최종연산
                
              System.out.println();
              // Stream은 1회용, Stream에 대해 최종연산을 수행하면 Stream이 닫힌다
              // 에러 출력 => 스트림이 최종연산 되었기 때문에 -> 스트림 다시 생성해서 출력해야 한다
              intStream = list.stream(); // list로부터 stream을 생성
              intStream.forEach(System.out::print);		
          }
      }
    

✔ 자바의정석Ch14-18 스트림 만들기 - 배열

자바의정석_14-18

  • EX

          // 1) Stream.of 메소드 사용 (가변인자 입력)
          Stream<String> strStream = Stream.of("a","b","c");
            
          // 2) 배열로 넣기
          String[] strArr = new String[] {"a","b","c","d"};
          // 2-1)
          Stream<String> strStream = Stream.of(strArr);
          // OR 
          // 2-2)
          Stream<String> strStream = Arrays.stream(strArr);
            
          // 3) 위의 식 한줄로 줄인것
          Stream<String> strStream = Stream.of(new String[] {"a","b","c","d"});
            
          // 4) Stream출력
          strStream.forEach(System.out::println);
    
            
          // 1) IntStream 사용 => 기본형 스트림이 된다
          // 기본스트림 : COUNT 메소드 이외에도 여러 메소드가 있다 => SUM,AVG 등...
          int[] intArr = {1,2,3,4,5};
          IntStream intStream = Arrays.stream(intArr);
            
          // 2) Stream<Integer> 사용 => Integer객체 스트림이 된다
          // COUNT 메소드 만 존재한다
          Integer[] intArr = {1,2,3,4,5};
          Stream<Integer> intStream = Arrays.stream(intArr);
            
            
          // 3) Stream출력
          intStream.forEach(System.out::println);
    

✔ 자바의정석Ch14-19 스트림 만들기 - 임의의 수 (난수)

자바의정석_14-19

  • EX
      package Java_Nam;
    
      import java.util.Random;
      import java.util.stream.IntStream;
    
      public class StreamEx2 {
    
          public static void main(String[] args) {
    
              // Random클래스 객체 생성 .ints 메소드 호출
              // int난수 스트림 반환
    
              // 1)
              IntStream intStream = new Random().ints();// 무한스트림
              // 2)
              IntStream intStream = new Random().ints(5,10); // 무한스트림, 범위 지정 => 5부터 10까지 => 10은 포함X
              // 3)
              IntStream intStream = new Random().ints(7,5,10); // limit 7개,5부터 10까지 
                
              // 스트림 출력
              // limit(5) : 5개만 출력하기
              intStream.limit(5).forEach(System.out::println);
          }
      }
    

✔ 자바의정석Ch14-20 스트림 만들기 - 특정 범위의 정수

자바의정석_14-20

✔ 자바의정석Ch14-21 스트림 만들기 - 람다식 iterate(), generate()

자바의정석_14-21

  • EX
          // iterate(T seed, UnaryPoerator(단항연산자) f) 
          // 1) iterate() 이용해 짝수 스트림 생성
          // n -> n + 2 : 람다식 
              Stream<Integer> intStream = Stream.iterate(2, n -> n + 2); 
            
          // 1-2) iterate() 이용해 홀수 스트림 생성
          Stream<Integer> intStream = Stream.iterate(1, n -> n + 2); 
            
          // 1) Stream 출력
          intStream.limit(10).forEach(System.out::println);
            
          // generate(Supplier s) : 주기만 하는것 입력X, 출력 O
          // 2) generate() 이용 : 1만 반복해서 출력
          Stream<Integer> oneStream = Stream.generate(()->1);
            
          // 2) Stream 출력
          oneStream.limit(10).forEach(System.out::println);
    

✔ 자바의정석Ch14-22 스트림 만들기 - 파일과 빈 스트림

자바의정석_14-22



Share Tweet +1