코드 그라데이션
후발대 17일차 전체 코드 본문
후발대수업_17.
스트림 (Stream)
- 스트림은 '데이터의 흐름’ 이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있다.
- 또 하나의 장점은 간단하게 병렬처리(multi-threading)가 가능하다는 점이다. 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것을 병렬 처리(parallel processing)라고 하는데, 즉 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있다.
- 스트림에 대한 내용은 크게 세 가지로 나눌 수 있는데,
- 생성하기 : 스트림 인스턴스 생성.
- 가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업(intermediate operations).
- 결과 만들기 : 최종적으로 결과를 만들어내는 작업(terminal operations).
- 중간 연산 (intermediate operations) : filter, map, sorted, distint, skip, ...
- 최종 연산 (terminal operation) : count, min, max, sum, forEach, anyMatch, allMatch ...
실습 코드
package com.sparta.hbd04.prac01.prac15;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class _05_Stream {
public static void main(String[] args) {
//스트림 생성
//Arrays.stream
int[] scores = {100, 95, 90, 85, 80};
IntStream scoreStream = Arrays.stream(scores);
String[] langs = {"python", "java", "javascript", "c", "c++", "c#"};
Stream<String> langStream = Arrays.stream(langs);
//Collections.stream()
List<String> langList = new ArrayList<>();
// langList.add("python");
// langList.add("java");
langList = Arrays.asList("python", "java", "javascript", "c", "c++", "c#");
// System.out.println(langList.size());
Stream<String> langListStream = langList.stream();
//Stream.of()
Stream<String> langListOfStream = Stream.of("python", "java", "javascript", "c", "c++", "c#");
// 스트림 사용
// 중간 연산 (Intermediate Operation) : filter, map, sorted, distint, skip, ...
// 최종 연산 (Terminal Operation) : count, min, max, sum, forEach, anyMatch, allMatch
// 90점 이상인 점수만 출력
Arrays.stream(scores).filter(x -> x >= 90).forEach(x -> System.out.println(x));
// Arrays.stream(scores).filter(x -> x >= 90).forEach(System.out::println);
System.out.println("---------");
// 90 점 이상인 사람의 수
int count = (int) Arrays.stream(scores).filter(x -> x >= 90).count();
System.out.println(count);
System.out.println("----------");
// 90 점 이상인 사람들의 점수들의 합
int sum = Arrays.stream(scores).filter(x -> x >=90).sum();
System.out.println(sum);
System.out.println("------------");
// 90 점 이상의 점수들을 정렬
Arrays.stream(scores).filter(x -> x>= 90).sorted().forEach(System.out::println);
System.out.println("------------");
// "python", "java", "javascript", "c", "c++", "c#"
// c 로 시작하는 프로그래밍 언어
Arrays.stream(langs).filter(x -> x.startsWith("c")).forEach(System.out::println);
System.out.println("-------");
// java 라는 글자를 포함하는 언어
Arrays.stream(langs).filter(x -> x.contains("java")).forEach(System.out::println);
System.out.println("--------");
// 4글자 이하의 언어를 정렬해서 출력
langList.stream().filter(x -> x.length() <=4).sorted().forEach(System.out::println);
System.out.println("----------");
// 4글자 이하의 언어 중에서 c라는 글자를 포함하는 언어
langList.stream()
.filter(x -> x.length() <=4)
.filter(x -> x.contains("c"))
.forEach(System.out::println);
System.out.println("-----");
// 4글자의 언어 중에서 c라는 글자를 포함하는 언어가 하나라도 있는지 여부
boolean anyMatch = langList.stream()
.filter(x -> x.length() <= 4)
.anyMatch(x -> x.contains("c"));
System.out.println(anyMatch);
System.out.println("-------");
// 4글자 이하의 언어들은 모두 c라는 글자를 포함하는지 여부
boolean allMatch = langList.stream()
.filter(x -> x.length() <= 3)
.allMatch(x -> x.contains("c"));
System.out.println(allMatch);
System.out.println("-------");
}
}
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 18일차 전체 코드 (0) | 2023.02.21 |
---|---|
후발대 17일차 코드 설명 추가 (0) | 2023.02.19 |
첫 번째 과제 개념정리 (0) | 2023.02.13 |
후발대 16일차 설명 추가 코드 (0) | 2023.02.12 |
후발대 16일차 전체 코드 (0) | 2023.02.12 |
Comments