코드 그라데이션

후발대 17일차 전체 코드 본문

Java/후발대

후발대 17일차 전체 코드

완벽한 장면 2023. 2. 19. 10:49

후발대수업_17.

스트림 (Stream)

  • 스트림은 '데이터의 흐름’ 이다. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다를 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있다. 즉, 배열과 컬렉션을 함수형으로 처리할 수 있다.
  • 또 하나의 장점은 간단하게 병렬처리(multi-threading)가 가능하다는 점이다. 하나의 작업을 둘 이상의 작업으로 잘게 나눠서 동시에 진행하는 것을 병렬 처리(parallel processing)라고 하는데, 즉 쓰레드를 이용해 많은 요소들을 빠르게 처리할 수 있다.
  • 스트림에 대한 내용은 크게 세 가지로 나눌 수 있는데,
  1. 생성하기 : 스트림 인스턴스 생성.
  2. 가공하기 : 필터링(filtering) 및 맵핑(mapping) 등 원하는 결과를 만들어가는 중간 작업(intermediate operations).
  3. 결과 만들기 : 최종적으로 결과를 만들어내는 작업(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