lambda 표현 식 의 Stream API

4089 단어
Stream 흐름 에 대한 작업 은 일부 프로그래머 가 IO 단계 에 머 물 러 있 습 니 다.이 노트 는 lambda 표현 식 에 대한 소개 이기 때문에 IO 부분 을 기록 하지 않 습 니 다.일상 개발 에 서 는 배열 과 집합 작업 이 필수 적 이 며, Stream 은 배열 과 집합 에 관 한 API 를 처리 합 니 다.
스 트림 특성
  • 데이터 구조 가 아니 라 내부 저장 소 가 없다
  • 색인 접근 지원 되 지 않 음
  • 지연 계산
  • 지원 병행
  • 배열 이나 집합 (List, Set)
  • 을 쉽게 생 성 할 수 있다.
  • 필터, 찾기, 변환, 집합, 집합 등 을 지원 합 니 다
  • Stream 운영 체제
  • Stream 은 소스, 중간 작업, 중지 작업 으로 나 뉜 다.
  • 흐름 의 소스 는 하나의 배열, 하나의 집합, 하나의 생 성기 방법 일 수 있다.
  • 하나의 흐름 은 0 개 또는 여러 개의 중간 작업 이 있 을 수 있 고 하나의 중간 작업 도 새로운 흐름 으로 돌아 가 다음 작업 에 사용 할 수 있 습 니 다.
  • 하나의 흐름 은 하나의 중지 작업 만 있 습 니 다.
  • 흐름 이 종료 작업 을 만 났 을 때 만 원본 이 반복 작업 을 시작 합 니 다. 이것 이 바로 Stream 이 지연 계산 하 는 특성 이 있 는 이유 입 니 다.

  • Stream 생 성
    배열 을 통 해 집합 을 통 해 Stream. generate 방법 으로 Stream. iterate 방법 으로 다른 API 를 통 해 만 듭 니 다.
    package com.per.lambada;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Stream;
    
    public class StreamTest {
        //         
        static void setArr1() {
            String arr[] = { "a", "b", "c", "d" };
            Stream stream = Stream.of(arr);
        }
        //   List      
        static void setArr2() {
            List list = Arrays.asList("a", "b", "c", "d");
            Stream stream = list.stream();
        }
        //  generate  (Supplier      )
        static void setArr3() {
            Stream stream = Stream.generate(() -> 1);
        }
        //  iterate  (UnaryOperator      )
        static void setArr4() {
            Stream stream = Stream.iterate(1, x -> x + 1);
        }
    }
    

    흐름 의 중간 조작
    필터 필터 무 거 운 distinct 정렬 sorted 캡 처 limit, skip 변환 map, flatMap 기타 peek
    흐름 의 종료 작업
    순환 for 각 계산 min, max, count, average 매 칭 anyMatch, allMatch, noneMatch, findFirst, findAny 집합 reduce 수집 기 toArray, collect
    package com.per.lambada;
    
    import java.util.Arrays;
    import java.util.List;
    import java.util.Optional;
    import java.util.Set;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    public class StreamTest {
        public static void main(String[] args) {
            //    :filter;    :forEach
            Arrays.asList(1,2,3,4,5,6,7).stream().filter(x->x%2==0).forEach(System.out::println);
            
            //    :filter,mapToInt;    :sum
            int sum = Arrays.asList(1,2,3,4,5,6,7).stream().filter(x->x%2==0).mapToInt(x->x).sum();
            System.out.println("sum:"+sum);
            
            //    :max;    :get
            int max = Arrays.asList(1,2,3,4,5,6,7).stream().max((a,b)->a-b).get();
            System.out.println("max:"+max);
            
            //    :min;    :get
            int min = Arrays.asList(1,2,3,4,5,6,7).stream().min((a,b)->a-b).get();
            System.out.println("min:"+min);
            
            Optional op = Arrays.asList(1,2,3,4,5,6,7).stream().filter(x->x%2==0).findAny();
            System.out.println("      "+op.get());
            
            int first=Arrays.asList(12,21,13,44,5,6,27).stream().sorted((a,b)->b-a).findFirst().get();
            System.out.println("             "+first);
            
            Object obj=Arrays.asList("ab","c","defg","hij","klm","n","opqrs").stream().sorted((a,b)->b.length()-a.length());
            System.out.println((String)obj.toString());
            
            //  1-50  list   
            List li = Stream.iterate(1, x->x+1).limit(50).collect(Collectors.toList());
            
            Object[] a=Arrays.asList(1,2,3,4,5,6,7,8,2,3,4,5).stream().distinct().toArray();
            
            //       distinct   Set       
            Set set=Arrays.asList(2,3,4,5,6,7,8,2,3,4,5,1).stream().collect(Collectors.toSet());
            System.out.println(set);
            
            String str ="11,22,33,44,55";
            int num =Stream.of(str.split(",")).mapToInt(x->Integer.valueOf(x)).sum();
            System.out.println(num);
        }
    }
    

    좋은 웹페이지 즐겨찾기