Stream 인터페이스에서 무한스트림을 생성하려면 두가지 정적 메소드가 있다.Stream.generate와 Stream.iterate가 있다. 1. Stream.generategenerate의 형식은 Stream.generate(인자없는 함수) 이다.이는 스트림 값이 필요하면 인자로 전달된 함수를 실행하여 값을 생산하고 이를 리턴한다. Stream.generate(()->"Hello");를 실행하면 Hello라는 상수가 리턴된다. 또한Stream.generate(Math::random);을 실행하면 난수가 리턴된다. 2. Stream.iterateiterate의 형식은 Stream.iterate(시작값, 함수) 이다.iterate는 무한 수열을 생성할 때 사용된다. Stream steam = Stream..
스트림을 임의로 생성할 수도 있다.예를 들어 String 배열의 스트림을 생성하려면 Stream stream = Stream.of(String 배열); 이렇게 하면된다. 인자로는 String의 배열 객체를 넣어주면 된다.이 Stream.of 메소드는 가변인자를 받기 때문에 인자의 개수가 여러개여도 상관 없다. Stream stream = Stream.of("가", "나", "다"); 이렇게 해도 된다는 뜻이다. 그리고 배열의 일부를 떼서 스트림을 생성하려면 Arrays.stream(배열, 시작인덱스, 끝인덱스) 를 사용하면 되고, 비어있는 스트림을 생성하려면 Stream.empty() 를 사용한다
List list = .... // 이미 값이 들어있다.list.stream().forEach(str->{System.out.println(count+"번째 : " + str);}); 이라는 상황을 가정할 때 count는 어떻게 셀까. 자유변수는 변경할 수 없다. 그래서 그냥 클래스를 하나 만들어서 정적 변수를 줬다. public class Count {public static int COUNT;} 이렇게 하면 List list = .... // 이미 값이 들어있다.Count.COUNT = 0;list.stream().forEach(str->{Count.COUNT++;System.out.println(count+"번째 : " + str);}); 이렇게 사용할 "순" 있다. 하지만 다중스레드에서 하나의 변..
보통 요소들의 집합에서 원하는 값들을 추출해낼 때에는 반복문을 돌려 값을 가져오곤 한다. 여태까지는 String의 리스트에서 Park으로 시작하는 문자열들을 개수를 세려면 아래와 같았다. List list = .... // 값이 들어있다.int count = 0;for(int i=0; istr.startsWith("Park")).count(); stream() 메소드는 배열의 스트림을 리턴한다. 그 스트림의 filter 메소드는 내부에 들어있는람다 표현식에 들어있는 조건에 부합하는 결과만 담아 새로운 스트림을 리턴한다. 리턴된 새로운 스트림에서 count 메소드를 호출하여 그 스트림의 결과값 개수를 얻는 것이다. 중요한 점은 stream() 메소드도 Stream 객체를 리턴하고 filter() 메소드도 ..
스트림은 데이터를 변환, 추출할 수 있어 Collection 인터페이스와 유사해 보인다.하지만 그 둘은 다르다. 그 차이점은 1. 스트림은 데이터를 보관하지 않는다. 데이터는 하부의 Collection에 보관되거나, 필요할 때 생성된다. 2. 스트림 연산은 원본을 변경하지 않고 결과를 담은 새로운 스트림을 생성해 리턴한다. 3. 스트림 연산은 필요하기 전까진 실행되지 않는다. 이를 지연연산이라 한다.또한 필요한 만큼만 실행된다. 예를 들어 100개의 단어중 "Park"으로 시작하는 단어를 처음부터 5개만 골라내라고 시키면 5번째까지만 일치 후 연산을 중단한다.
list.forEach(System.out::println); 이라 하면 list 객체 안에 들어있는 값들을 순서대로 출력해준다. 하지만 이러면 코드블록 안에 여러 줄의 코드를 넣을 수 없다. 이 때에는 람다 표현식을 메소드 레퍼런스로 표현하는 것과 같이 거꾸로 메소드 레퍼런스를 람다 표현식으로 변환하면 된다. (str)->System.out.println(str) ===> System.out::println 을 거꾸로 하면 System.out::println ===> (str)->System.out.println(str) 이 될 수 있다. 그러므로 코드블록을 여러 줄 사용하려면 list.forEach((value)->{ int size = value.length(); System.out.println(..
- Total
- Today
- Yesterday
- 컴퓨터 시간
- 메모리
- Jackson
- 자료구조
- 알람
- gitlab
- Stream
- json
- Docker
- 시간
- 클로저
- 퍼포먼스
- 코어
- 프로세서
- Clojure
- 성능개선
- 람다
- opensource
- RAMDA
- Swift 2.0
- 자바 성능
- 리액트
- Java
- rambda
- javascript
- Java8
- 성능
- 자바
- react
- 날짜
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |