반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[java] java stream 본문

JAVA/study

[java] java stream

닉의네임 2022. 5. 21. 13:36
반응형
//스트림 생성
//컬렉션
List<String> list = Arrays.asList("a", "b", "c");
Stream<String> stream = list.stream();

//배열
String[] array = new String[]{"a","b","c"};
Stream<String> stream1 = Arrays.stream(array);
Stream<String> stream2 = Arrays.stream(array, 1, 3); //정적메소드 Arrays.stream() 에 인자를 입력 //인덱스 1 포함, 3제외

//빌더
Stream<String> stream3 = Stream.<String>builder().add("a").add("b").build();

//Generator
Stream<String> stream4 = Stream.generate(()->"a").limit(3); //a를 무한대생성 limit 3으로 끊음

//Iterator
Stream<Integer> stream5 = Stream.iterate(100, n -> n+10).limit(5);

//empty Stream
Stream<String> stream6 = Stream.empty();

//기본타입 (Primitive Type)에 대하여 오토박싱과 언박싱이 일어날때 오버헤드가 발생해서 성능저하가 있을 수 있다. 방어
IntStream intStream = IntStream.range(1,10); // 1~9
LongStream longStream = LongStream.range(1,10000); //1~ 9999

//제네릭을 이용한 클래스로 사용하려면
Stream<Integer> stream7 = IntStream.range(1,10).boxed();

//random 으로 뽑아내기
DoubleStream stream8 new Random().doubles(3); //랜덤 숫자 3개 생성

//문자열 스트림
IntStream stream9 = "Hello, world".chars(); //ASCII 코드값을 스트림 형태로 뽑아주는 예제코드
Stream<String> stream10 = Pattern.compile(",").splitAsStream("a,b,c"); // 구분자 (delimiter) 를 이용
Stream<String> stream11 = Files.lines(Paths.get("filetext.txt"), Charset.forName("UTF-8")); //파일데이터 라인단위로 읽어 UTF-8로 디코딩

//스트림 연결 -  concat
Stream<String> stream12 = Stream.of("Apple", "Banana","Orange");
Stream<String> stream13 = Stream.of("삼성", "엘지","한화");
Stream<String> stream14 = Stream.concat(stream12,stream13);

//Filter
Stream<Integer> stream15 = IntStream.range(1,10).boxed();
stream15.filter(v -> ((v % 2) == 0)).forEach(System.out::println);

//map - 람다식을 인자로 받고 새로운 데이터를 만들어 낸다
Stream<Integer> stream16 = IntStream.range(1, 10).boxed();
stream16.filter(v -> (v % 2)==0).map(v -> v *10).forEach(System.out::println);

//flatMap
List<List<String>> lists = Arrays.asList((Arrays.asList("a","b","c"), Arrays.asList("A","B","C"));
List<String> flatList = lists.stream().flatMap(Collection::stream).collect(Collectors.toList());

//스트림 데이터 정렬 sorted
Stream<T> sorted();
Stream<T> sorted(Comparator<? super T> comparator);

//로깅을 하고 싶다 - peek
int sumPeek = IntStream.range(1,10).peek(System.out::println).sum();

//스트림 결과 생성
int sum = IntStream.range(1,10).sum();
long count = IntStream.range(1,10).count();
OptionalInt max = IntStream.range(1,10).max();
OptionalInt min = IntStream.range(1,10).min();
OptionalDouble avg = IntStream.range(1,10).average();


//reduce
//스트림에서 나오는 값들을 accumulator 함수로 누적
Optional<T> reduce (BinaryOperator<T> accumulator);

// 위내용 + 초기값 (identity) 있는
T reduce(T identity, BinaryOperator<T> accumulator);

(a,b) -> Integer.sum(a, b);

//Collect
Set<Integer> evenNumber = IntStream.range(1,1000).boxed().filter(n ->(n % 2 == 0)).collect(Collectors.toSet());

//Collect.joining()
List<String> fruit = Arrays.asList("Apple", "Banana","Orange");
String returnValue = fruit.stream().collect(Collectors.joining());
String returnValueAddText = fruit.stream().collect(Collectors.joining(",", "<", ">"));

//foreach
IntStream.range(1,1000).boxed().filter(n -> (n%2 == 0)).forEach(System.out::println);
반응형
Comments