Java 8 자습서: 메인스트림 API 이상

자바8은 2014년에 발표되어 현재 현대 개발자들에게 없어서는 안 될 새로운 기능으로 불리고 있다. 예를 들어 lambda 표현식, 병발 API 개선, 기능 인터페이스와 대량 데이터 처리 개선 등이다.그때부터 여러 해가 지났지만 자바8은 여전히 자바에서 가장 자주 사용하는 버전으로 2020년 60%가 넘는 전문 개발자들이 자바8을 그들의 오피스 표준 버전으로 삼았다.
보고서는 Java 버전을 주요 응용 프로그램의 개발자 백분율로 지정합니다.

따라서 직장을 옮기든 시작하든 자바8을 익히는 것은 현재 기술 세계의 기본 기술이다.만약 당신이 지금 자바 버전만 바꾸고 있다면, 모임에 참가하는 것이 좀 늦었다고 느낄 수도 있지만, 걱정하지 마세요!자바 8의 특성은 생각보다 쉽게 파악할 수 있습니다. 오늘 저는 자바 8의 가장 중요한 업데이트 중 하나인 흐르는 API를 익힐 것입니다.
오늘 우리 복습합시다.
  • What is a Stream in Java 8?
  • Features of the Stream
  • Comparing Streams and Loops
  • Java 8 Stream API Pipeline: Intermediate and Terminal Operations

  • What should you learn next?
  • Java 8 직접 체험


    Java 8의 모든 강력한 기능은 처음부터 직접 체험할 필요가 없습니다.
    Java 8 for Experienced Developers: Lambdas, Stream API & Beyond

    Java 8의 흐름은 무엇입니까?


    강력한 Oracle Interface Package Summary의 경우 흐름은 순차 및 병렬 집합 작업을 지원하는 요소 시퀀스입니다.비록 이것은 매우 좋은 우회령이지만, 결코 가장 이해하기 쉬운 정의는 아니다.번역을 허락해 주세요.
    Streams는 Java 8에 추가된 추상적인 레이어로 개발자가 객체나 원어의 집합을 쉽게 조작할 수 있도록 합니다.그것은 데이터 구조가 아니다. 왜냐하면 그것은 데이터를 저장하지 않기 때문이다.반대로 그것은 데이터 원천에서 목적지로의 전환 매개체이다.
    집합 조작(때로는 흐름 조작이라고도 부른다)은 흐름 특유의 조작일 뿐, 우리는 이러한 조작을 사용하여 일회성 변환 부분(또는 전부)의 흐름을 사용할 수 있다.잠시 후에 우리는 이 예들을 볼 것이다.
    마지막으로 순서와 병행은 흐름 조작을 완성할 때 실현concurrency의 능력을 가리킨다.이 조작은 한 라인에서 한 번에 하나를 적용할 수도 있고, 여러 라인 사이에서 분리할 수도 있으며, 각 라인마다 이 조작을 동시에 적용할 수도 있다.
    흐름은 일반적으로 파이프로 여겨진다. 왜냐하면 데이터 원본 간의 중간 절차를 충당하여 어떤 방식으로 그것을 전환한 후에 새로운 형식으로 하류로 출력하기 때문이다.우리가 아래에서 중간과 단말기 조작을 연구할 때, 우리는 이 은유를 다시 토론할 것이다.
    흐름 API를 사용하려면 전통적인 인코딩과 완전히 다른 인코딩 스타일이 필요하다. 자바의 대부분의 인코딩은 명령식 스타일로 작성되었지만 개발자가 명령식 스타일에서 무엇을 하고 어떻게 완성해야 하는지를 지시하지만 흐름 API에서의 조작은 성명식이나 이벤트 구동식 스타일이 필요하다.
    SQL

    흐름의 특징


    이제 우리는 흐름이 무엇인지 알게 되었다. 다음은 흐름을 사용할 때 활용할 수 있는 몇 가지 특성을 빠르게 소개한다.
  • 소스 컬렉션 또는 배열
  • 을 사용하여 생성
  • 그룹을 변환할 수 있지만 변경할 수 없음
  • 의 데이터
  • 전체 컬렉션을 한 번에 쉽게 조작할 수 있음
  • 스트림 선언식 처리
  • 데이터를 저장하지 않고 처리하는 데이터를 조정하지 않기 때문에 데이터 구조가 아니다.
  • lambda 표현식을 통해 조절 가능
  • 흐름과 순환 비교


    흐름은 항상 순환에 비유된다. 왜냐하면 둘 다 프로그램에서 교체 행위를 만드는 데 사용되기 때문이다.순환에 비해 난잡한 순환 문법을 잘라내서 흐름이 더 깔끔해 보인다.성명식 풍격 때문에 흐름은 한눈에 이해하기 쉽다고 할 수 있다.
    다음은 두 단락의 자바 코드가 있는데 모두 흐름stream과 for순환loop을 사용하여 데이터 집합을 인쇄하는 같은 작업을 실현한다.그들이 어떻게 다른지 봐라!우리는 아래에서 이에 대해 더욱 상세한 분석을 진행할 것이다.
    흐르다
    import java.util.stream.*;
    
    class StreamDemo {
    
        public static void main(String[] args)
        {
            Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9);
            stream.forEach(p -> System.out.println(p));
        }
    }
    
    고리
    class ArrayTraverse {
        public static void main(String args[]) {
            int my_array[]={1,2,3,4,5,6,7,8,9};
            for(int i:my_array) {
                System.out.print(i+" ");
            }
        }
    }
    
    자동 교체 forEach() 흐름 조작을 사용할 때, 우리는 줄 수를 줄이고 코드를 더욱 읽을 수 있도록 할 수 있음을 주의하십시오.
    for 순환에 대해 대부분의 코드는 인쇄 그룹이 아니라 교체를 만드는 데 사용됩니다.이것은 개발자를 위해 많은 추가 시간을 증가시켰다.API 라이브러리의 흐름 조작 처리가 교체되기 때문에, 코드는 흐름을 제어하는 모든 작은 바이트가 아니라 계산의 논리를 명확하게 표현할 수 있습니다.
    그러나 이런 스타일을 채택한 단점은 명령식 스타일을 사용한 지 여러 해가 된 업계 베테랑들에게 과도가 어려울 수 있다는 것이다.만약 네가 그것을 주우려고 노력하고 있다면, 너는 결코 유일한 사람이 아니다.
    주의해야 할 또 다른 단점은 흐름, 특히 병행류가 for순환의 비용보다 훨씬 크다는 것이다.만약 프로그램에 비용 문제가 존재한다면, 이 점을 기억하십시오.

    흐름의 장점과 단점


    이점:
  • 코드의 시각적 혼란 감소
  • 컴파일러가 필요 없음
  • "what"대신 "how"를 쓸 수 있다. 일목요연하다
  • 실행 속도가 순환과 같거나
  • 대규모 목록
  • 단점:
  • 대규모 간접 비용
  • 소집합의 과도한 살상
  • 전통적인 명령식 인코딩에 사용하면 식별하기 어렵다
  • 계속 공부하다.


    시냇물에만 머무르지 마라.상호작용 인코딩 예시를 통해 자바 8 lambda 표현식, 자바 시간 등 고급 자바 개념을 더 많이 알 수 있다.HelloWorld에게 안녕히 계세요. 당신의 기술 수준에 따라 맞춤형 수업과 강좌에 대해 인사하세요!

    Java 8 for Experienced Developers: Lambdas, Stream API & Beyond


    Java 8 스트림 API 파이핑: 중간 및 터미널 작업


    집합 작업은 두 가지 유형이 있다.중간과 단말기.각 스트림은 0 개 이상의 중간 작업과 하나의 터미널 작업, 그리고 업스트림에서 가장 먼 곳(예를 들어 진열이나 목록)에 있는 데이터 원본을 가지고 있다.
    중간 작업은 하나의 흐름을 입력으로 하고 완성된 후에 하나의 흐름을 되돌려줍니다. 이것은 한 줄에서 여러 작업을 수행할 수 있음을 의미합니다.
    우리의 이전 비유에서 이런 조작은 파이프 구간과 같아서 물 표본 데이터가 끊기지 않는 상황에서 드나든다.비록 그들은 흐름을 새로운 방향으로 재정비하거나 그 형식을 바꿀 수 있지만, 그것은 여전히 흐를 수 있다.중간 작업의 일반적인 예는 filter(), forEach()map() 입니다.우리 아래에서 그것들을 토론합시다.

    필터()


    이 방법은 하나의 흐름을 얻고 통과된 기준에 따라 그 중 일부를 선택한다.우리의 비유에서 filter() 파이프 연결이나 밸브가 하류의 일부분을 다른 길에 의뢰하는 것이다.
    예를 들어 아래에서 우리는 정수 흐름에서 filter() 정수가 10보다 큰 흐름을 되돌려 준다.
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.*;
    
    class StreamDemo {
    
        public static void main(String[] args) {
    
            //Created a list of integers
            List<Integer> list = new ArrayList<>();
            list.add(1);
            list.add(12);
            list.add(23);
            list.add(45);
            list.add(6);
    
            list.stream()                           // Created a stream from the list
                    .filter(num -> num > 10)        //filter operation to get only numbers greater than 10
                    .forEach(System.out::println);  // Printing each number in the list after filtering.
    
            //Again printing the elements of List to show that the original list is not modified.
            System.out.println("Original list is not modified");
            list.stream() 
                    .forEach(System.out::println);
        }
    }
    
    주의해야 할 것은 원시 흐름을 바꾸지 않기 때문에 정적 데이터가 있는 검색 작업(예를 들어 데이터베이스 검색)에 매우 효과적이다.

    지도 ()


    이 방법은 하나의 흐름과 다른 방법을 입력으로 하고 이 함수를 흐름의 모든 요소에 적용한다.그리고 이 결과를 사용하여 하류로 보내는 새 흐름을 채웁니다.
    예를 들어 다음에 우리는 명칭 흐름에서 map() 방법을 각 명칭에 적용한다.이것은 모든 사람의 이름을 대문자로 쓰는 새로운 흐름을 만들 것이다.이것은 단지 일종의 매핑 조작일 뿐이다.다른 것은 toUpperCase, 흐름을 정수로 변환하고, MaptoInt(), 모든 흐름 원소를 한데 조합하는 것이다.
    import java.util.ArrayList;
    import java.util.List;
    import java.util.stream.*;
    
    class StreamDemo {
    
        public static void main(String[] args) {
            List<String> list = new ArrayList<>();
            list.add("Dave");
            list.add("Joe");
            list.add("Ryan");
            list.add("Iyan");
            list.add("Ray");
            // map() is used to convert each name to upper case.
            // Note: The map() method does not modify the original list.
            list.stream()
                    .map(name -> name.toUpperCase()) //map() takes an input of Function<T, R> type.
                    .forEach(System.out::println);   // forEach() takes an input of Consumer type.
    
        }
    }
    
    터미널 작업은 원어나 대상과 같은 흐름 이외의 내용을 되돌려줍니다.이것은 비록 많은 중간 조작이 직렬적으로 완성될 수 있지만, 단지 하나의 단말기 조작만 있을 수 있다는 것을 의미한다.
    우리의 은유에서 이러한 조작은 한 줄의 종결로 간주된다.하나의 흐름이 들어오지만, 그 흐름은 멈추고, 서로 다른 유형의 데이터를 남긴다.비록 이 데이터들은 회류 형식을 넣을 수 있지만, 그것은 단말기 조작의 입력 흐름과 같지 않다.
    터미널 작업의 가장 흔한 예는 flatMap() 함수입니다.

    forEach()


    이 방법은 흐름을 입력으로 하고 흐름에서 교체하여 그 중의 모든 요소에 대해 조작을 완성하고 이 조작의 결과를 출력한다.forEach()forEach() 사이의 관건적인 차이점은 전자가 비유류 형식으로 데이터를 되돌려 단말기로 만드는 데 있다.
    지난 예시를 다시 한 번 봅시다.출력은 수집된 정수 흐름이 아니라 단독으로 인쇄된 정수라는 것을 알 수 있습니다.
    import java.util.stream.*;
    
    class StreamDemo {
    
        public static void main(String[] args)
        {
            Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9);
            stream.forEach(p -> System.out.println(p));
        }
    }
    

    다음은 무엇을 배워야 합니까?


    업계 전체의 개발팀은 자바 8이 인기가 많고 계속 존재할 것이라고 분명히 밝혔다.만약 자바 8을 배우고 있다면, 이것은 단지 시작일 뿐, 아직도 많은 감동적인 특성을 탐색해야 한다.
    이 여정을 완성하는 데 도움을 드리기 위해 를 제공하게 되어 기쁩니다. 이것은 베테랑 Java 개발자인 Saurav Aggarwal이 작성한 과정입니다. 그 중에서 몇 가지 기교와 상호작용 예시를 포함하고 주제는 lambda 표현식 증강 흐름을 사용하고 고급 흐름 API를 깊이 연구하며 집합 관리, Completable Future 병발 등을 포함합니다.
    네가 다음에 어디로 가든지, 나는 네가 행운을 빌고, 너의 자바 8 여행을 계속할 것이다!

    경험이 풍부한 개발자를 위한 Java 8: Lambdas, Stream API 및 기타 Java 읽기 계속하기

  • 15 Java Interview Questions to Help you Prepare
  • 좋은 웹페이지 즐겨찾기