자바 스트림(Stream), 람다(Lambda)

2024. 3. 12. 14:10·Java
목차
  1. Stream 생성
  2. 중간 연산
  3. 최종연산
  4. 예시
  5. 람다식
728x90

Stream 생성

배열

Arrays 클래스의 static 메소드인 stream()에 배열 인스턴스를 전달

 int[] i = {1,2,3,4,5};
 IntStream istm = Arrays.stream(i);

컬렉션

컬렉션 인스턴스를 대상으로 디폴트 메소드 stream()을 호출

 List<String> s = Arrays.asList("a", "b", "c");
 Stream<String> stm = s.stream();

데이터 직접 전달

Stream클래스 혹은 IntStream 등의 기본 자료형 스트림의 static 메소드인 of()에 stream에 넣고 싶은 데이터들을 전달

 Stream<Integer> istm = Stream.of(1,2,3);
 IntStream istm = IntStream.of(1,2,3);

 

중간 연산

  • filter(Predicate<T> p) : boolean test(T t)
  • map(Function<T, R> f)
  • peek(consumer<T> c) : void accept(T t)
  • sorted(Comparator<T> c) : int compare(T o1, T o2)

 

최종연산

  • forEach(Consumer<T> c): void accept(T t)
  • toArray()
  • collect()
    • collect(Collectors.toList()): 리스트로 만들 때 유용
    • collect(Collectors.joining(””)): string으로 만들 때 유용
  • sum(), count(), average(), min(), max()
    • IntStream, LongStream, DoubleStream 인스턴스 대상으로만 사용이 가능
    • average(), min(), max() 메소드들은 결과값으로 Optional 리턴 : ifPresent(Consumer<T> c), get(), orElse() 사용
  • allMatch(), anyMatch(), noneMatch()

 

예시

Test 클래스의 이너클래스 Detail에 name이라는 필드가 있을 때(getter, settger 생략)

class Test {
    private final Detail detail;
    private final int state;


    class Detail {
        private final String name;
    }

}

state가 1이 아닌 것 리스트 구하기

List<Test> filteredList = testList.
    .stream().filter(test -> test.getState!=1) // state가 1이 아닌 것 필터
    .collect(Collectors.toList());

name 필드 상위 3개 구하기

public List<Map.Entry<String, Long>> findFrequentName(List<Test> testList) {

    Map<String, Long> map = testList.stream() // 스트림으로 변환
            .map(webLog -> webLog.getDetail().getName()) // 이름 추출
            .collect(Collectors.groupingBy(key -> key, Collectors.counting())); 
            // 이름을 키값으로 카운트 값

    // 상위 3개
    return map.entrySet().stream()
            .sorted(Comparator.comparing(Map.Entry::getValue, Comparator.reverseOrder())) // 내림차순 정렬
            .limit(3).collect(Collectors.toList());
}

문자열을 스트림 처리한 뒤 리스트의 첫번째가 이넘중 하나에 포함되는지 체크하기

enum AlphaType { 
    A,B,C,D
}

String path = "A/test/468/";

String temp = Arrays.stream(path.split("/"))
	.filter(p -> !p.isEmpty())
        .collect(Collectors.toList())
        .get(1);
        
// enum 체크 
if (Arrays.stream(AlphaType.values()).anyMatch(v -> v.name().equals(temp))) { 
    return;
}

 

람다식

  • 함수(메서드)를 간단한 식으로 표현하는 방법
  • (인자 목록) -> { 로직 }
// 메서드
void foo() {
    System.out.println("TEST");
}

// 람다식
() -> {
    System.out.println("TEST");
};
728x90
  1. Stream 생성
  2. 중간 연산
  3. 최종연산
  4. 예시
  5. 람다식
'Java' 카테고리의 다른 글
  • JVM (Java Virtual Machine) 개념, JDK, JRE
  • 자바 우선순위큐(PriorityQueue)
  • 자바 순열, 조합 구하기 (파이썬 itertools 라이브러리)
  • ProcessBuilder Java 쉘 명령어, 스크립트 실행
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    힙
    트리
    이분탐색
    덱
    재귀
    알고리즘
    DFS
    최대공약수
    월간코드챌린지
    파이썬
    구간합
    동적계획법
    Algorithm
    스택
    플로이드워셜
    정렬
    조합
    구현
    최소신장트리
    다익스트라
    자료구조
    큐
    백준
    DP
    그리디
    BFS
    프로그래머스
    그래프
    LIS
    최단거리
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
자바 스트림(Stream), 람다(Lambda)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.