초보자를 위한 Java 스트림: Java에서 스트림 사용 소개

초보자를 위한 Java 스트림: Java에서 스트림 사용 소개

Java 8 스트림을 통해 개발자는 사전 정의된 작업 세트를 사용하여 대규모 컬렉션에서 정확한 데이터를 추출할 수 있습니다.





Java 8 릴리스 이전에는 Java에서 '스트림'이라는 용어를 사용하면 자동으로 I/O와 연결되었습니다. 그러나 Java 8은 일반적으로 '스트림 파이프라인'이라고 하는 것에서 함께 연결된 일련의 계산 단계라고 할 수 있는 스트림을 도입했습니다.





이 기사에서는 Java 8 스트림을 소개하고 프로젝트에서 어떻게 유용할 수 있는지 보여줍니다.





스트림이란 무엇입니까?

스트림은 소스를 가져와 특정 데이터를 추출하는 일련의 작업을 수행한 다음 해당 데이터를 사용하도록 애플리케이션에 제공하는 Java 인터페이스입니다. 기본적으로 일반화된 데이터 모음에서 전문화된 데이터를 추출할 수 있습니다.

스트림 작동 방식

스트림 파이프라인은 항상 소스로 시작합니다. 소스 유형은 처리하는 데이터 유형에 따라 다르지만 가장 많이 사용되는 두 가지는 배열과 컬렉션입니다.



컬렉션을 초기 스트림으로 변환하려면 다음을 추가해야 합니다. 개울() 소스에 대한 기능. 이렇게 하면 소스가 여러 다른 중간 작업(예: 필터() 그리고 종류() )에 작동할 수 있습니다.

필요한 모든 중간 작업을 수행한 후 터미널 작업(예: 각각() ), 소스에서 이전에 추출된 데이터를 생성합니다.





시냇물 없는 삶

Java 8은 2014년에 출시되었지만 그 이전에는 Java 개발자가 일반 데이터 모음에서 특수 데이터를 추출해야 했습니다.

페이스북에서 생일 축하한다고 말하는 방법

고유한 문자열 값을 형성하기 위해 난수와 결합된 임의의 문자 목록이 있지만 문자 C로 시작하는 값만 원하고 결과를 오름차순으로 정렬하려고 한다고 가정해 보겠습니다. 이것이 스트림 없이 해당 데이터를 추출하는 방법입니다.





관련된: Java에서 문자열 사용에 대해 알아야 할 사항

스트림이 없는 값 필터링 및 정렬 예제


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//declare the array list will store needed values
List requiredValues = new ArrayList();
//extracting the required values and storing them in reqquiredValues
randomValues.forEach(value -> {
if(value.startsWith('C')) {
requiredValues.add(value);
}
});
//sort the requiredValues in ascending order
requiredValues.sort((String value1, String value2) -> value1.compareTo(value2));
//print each value to the console
requiredValues.forEach((String value) -> System.out.println(value));
}
}

스트림을 사용하든 다른 추출 방법을 사용하든 배열 목록을 선언하고 초기화해야 합니다. 스트림을 사용하는 경우 필요하지 않은 것은 필요한 값을 보유하기 위해 새 변수를 선언하거나 위의 예에서 다른 5개 이상의 코드 라인을 생성하는 것입니다.

관련된: Java에서 배열에 대한 작업을 만들고 수행하는 방법

위의 코드는 콘솔에 다음 출력을 생성합니다.


C11
C12
C13
C14
C15
C16

스트림과 함께하는 삶

프로그래밍에서 효율성은 훨씬 적은 코드로 동일한 결과를 생성하는 것을 말합니다. 이것이 바로 스트림 파이프라인이 프로그래머에게 하는 일입니다. 그래서 다음에 누군가가 질문할 때: 프로젝트에서 스트림을 사용하는 것이 왜 중요한가요? 간단히 말해서 스트림은 효율적인 프로그래밍을 지원합니다.

위의 예를 계속하면 스트림을 도입하면 전체 프로그램이 변환되는 방식입니다.

스트림 예제를 사용하여 값 필터링 및 정렬


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'C13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'C16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

위의 코드는 스트림 인터페이스가 얼마나 강력한지 보여줍니다. 임의의 배열 값 목록을 가져와 다음을 사용하여 스트림으로 변환합니다. 개울() 기능. 그런 다음 스트림은 필요한 값(다음으로 시작하는 모든 값)을 포함하는 배열 목록으로 축소됩니다. )를 사용하여 필터() 기능.

위의 예에서 볼 수 있듯이, 값은 배열 목록에 무작위로 배열됩니다. 파이프라인의 이 지점에서 스트림을 인쇄하려는 경우 값은 C15 먼저 인쇄됩니다. 따라서 종류() 새 배열을 오름차순으로 재정렬하기 위해 스트림 파이프라인에 함수가 도입되었습니다.

스트림 파이프라인의 마지막 기능은 각각() 기능. 이것은 스트림 파이프라인을 중지하고 콘솔에서 다음 결과를 생성하는 데 사용되는 터미널 함수입니다.


C11
C12
C13
C14
C15
C16

스트림 중간 작업

스트림 파이프라인에서 사용할 수 있는 광범위한 중간 작업 목록이 있습니다.

스트림 파이프라인은 항상 단일 소스로 시작하고 개울() 함수이며 항상 단일 터미널 작업으로 끝납니다(선택할 수 있는 몇 가지 다른 작업이 있지만). 그러나 이 두 섹션 사이에는 사용할 수 있는 6개의 중간 작업 목록이 있습니다.

위의 예에서는 이러한 중간 작업 중 2개만 사용됩니다. 필터() 그리고 종류() . 선택하는 중간 작업은 수행하려는 작업에 따라 다릅니다.

위의 배열 목록에서 C로 시작하는 값이 소문자이고 동일한 중간 작업을 수행한 경우 다음 결과를 얻을 수 있습니다.

소문자 값에 대한 필터 및 정렬 작업 수행 예


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

위의 코드는 콘솔에 다음 값을 생성합니다.


C11
C12
C14
C15

위 출력의 유일한 문제는 모든 항목을 정확하게 나타내지 않는다는 것입니다. 배열 목록의 값. 이 작은 오류를 수정하는 좋은 방법은 스트림 파이프라인에 다른 중간 작업을 도입하는 것입니다. 이 작업은 지도() 기능.

맵 함수 예제 사용


import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
//declare and initialize the array list
List randomValues = Arrays.asList(
'E11', 'D12', 'A13', 'F14', 'C15', 'A16',
'B11', 'B12', 'c13', 'B14', 'B15', 'B16',
'F12', 'E13', 'C11', 'C14', 'A15', 'c16',
'F11', 'C12', 'D13', 'E14', 'D15', 'D16'
);
//transforms all lower case characters to upper case,
//retrieves only values that start with C, sort them, and print them to the console.
randomValues.stream().map(String::toUpperCase).filter(value->value.startsWith('C')).sorted().forEach(System.out::println);
}
}

NS 지도() 함수는 객체를 한 상태에서 다른 상태로 변환합니다. 위의 예에서는 배열 목록의 모든 소문자를 대문자로 변환합니다.

배치 지도() 함수 바로 앞에 필터() 함수는 다음으로 시작하는 모든 값을 검색합니다. 배열 목록에서.

위의 코드는 콘솔에 다음 결과를 생성하여 모든 배열 목록의 값.


C11
C12
C13
C14
C15
C16

애플리케이션에서 사용할 수 있는 다른 세 가지 중간 작업은 다음과 같습니다.

  • 몰래 엿보다()
  • 한계()
  • 건너 뛰기()

효율적인 코드 생성을 촉진하는 Java 8 스트림

Java 8 스트림을 사용하면 한 줄의 코드로 대규모 소스에서 추가로 구체적이고 관련성 있는 데이터를 추출할 수 있습니다. 이니셜을 포함하는 한 개울() 함수 및 터미널 연산자를 사용하면 목표에 맞는 출력을 제공하는 중간 작업의 모든 조합을 사용할 수 있습니다.

페이스 북에서 그룹을 검색하는 방법

내부에 포함된 코드 행에 대해 궁금한 사항이 있는 경우 필터() 기능; 그것은 '람다 식'으로 알려져 있습니다. 람다 표현식은 Java 8에 도입된 또 다른 기능이며 유용할 수 있는 많은 부분이 있습니다.

공유하다 공유하다 트위터 이메일 Java 8 Lambda에 대한 간략한 소개

Java 프로그래머이고 Java 8 람다에 대해 더 알고 싶다면 이 기사에서 람다 구문과 사용법을 자세히 살펴보겠습니다.

다음 읽기
관련 항목
  • 프로그램 작성
  • 자바
  • 코딩 튜토리얼
저자 소개 카데이샤 킨(21편 게재)

Kadeisha Kean은 전체 스택 소프트웨어 개발자이자 기술/기술 작가입니다. 그녀는 가장 복잡한 기술 개념 중 일부를 단순화하는 독특한 능력을 가지고 있습니다. 기술 초보자라면 누구나 쉽게 이해할 수 있는 소재를 생산합니다. 그녀는 글쓰기, 흥미로운 소프트웨어 개발 및 세계 여행(다큐멘터리를 통해)에 열정적입니다.

카데이샤 킨이 참여한 작품 더보기

뉴스레터 구독

기술 팁, 리뷰, 무료 전자책 및 독점 거래에 대한 뉴스레터에 가입하십시오!

구독하려면 여기를 클릭하세요.