Stream
java8 버전부터 lambda와 함께 Stream기능을 제공한다.
Stream은 흐름이라는 뜻으로 배열, 컬렉션 객체 요소를 효율적으로 다룰 수 있고
람다식을 지원하여 코드가 간결하다는 장점이 있다.
특징
원본 데이터 자체를 변경하지 않는다
한번 사용하면 닫혀서 재활용(재사용) 이 불가능하다
내부 반복문으로 처리하여 코드가 간결해 보인다
1. 여러가지 방법으로 Stream 생성하기
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class StreamBasic {
public static void main(String[] args) {
//Array
String[] arr1 = new String[]{"111","222","333"};
Stream<String> stream1 = Arrays.stream(arr1);
stream1.forEach(System.out::println);
System.out.println();
Stream<String> stream2 = Arrays.stream(arr1, 0, 1);
stream2.forEach(System.out::println);
System.out.println();
//Collection method
List<String> list = Arrays.asList("aaa","bbb","ccc");
Stream<String> stream3 = list.stream();
stream3.forEach(System.out::println);
System.out.println();
//aaa
//bbb
//ccc
//builder
Stream<String> stream4 =
Stream.<String>builder()
.add("빌더1").add("빌더2").add("빌더3")
.build();
stream4.forEach(System.out::println);
System.out.println();
//빌더1
//빌더2
//빌더3
//stream generate
Stream<String> stream5 =
Stream.generate(()-> "생성요소").limit(3);
stream5.forEach(System.out::println);
System.out.println();
//생성요소
//생성요소
//생성요소
//stream iterate
Stream<Integer> stream6 =
Stream.iterate(2, n->n*2).limit(10);
stream6.forEach(System.out::println);
//2
//4
//(생략)
//1024
}
}
2. Stream 중간연산으로 가공하기
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
//중간연산
public class intermediateOperation {
public static void main(String[] args) {
List<String> list1 = Arrays.asList("a","ab","abc","abcd","abc");
List<Integer> intList = Arrays.asList(1,7,2,3,6,5);
// 중간연산
List<String> result = list1.stream()
.filter(x-> {
System.out.println(x+ " in filter method");
return x.length() >=2;
}).map(x-> {// 특정 형태로 변환
System.out.println(x + " in map method");
return x.toUpperCase();
}).limit(3)
.collect(Collectors.toList());
System.out.println(result);
// 필터링
Stream<String> list2 = list1.stream().filter(s -> s.length() == 3);
System.out.println("filter "+Arrays.toString(list2.toArray()));
Stream<String> list3 = list1.stream().filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.length() == 2;
}
});
System.out.println("filter2 "+Arrays.toString(list3.toArray()));
// 중복제거 distinct
list1.stream().distinct()
.forEach(System.out::println);
//정렬
Stream<Integer> intList2 = intList.stream().sorted();
System.out.println(Arrays.toString(intList2.toArray()));
Stream<Integer> intList3 = intList.stream().sorted(Comparator.reverseOrder());
System.out.println(Arrays.toString(intList3.toArray()));
}
}
'수업 & 공부' 카테고리의 다른 글
docker - zookeeper - KAFKA 참고 (KAFKA CLI) (0) | 2022.10.12 |
---|---|
KAFKA (0) | 2022.10.07 |
Thread (lambda) (0) | 2022.10.03 |
lambda (0) | 2022.10.01 |
Wrapper Class란 (0) | 2022.09.29 |