on
JAVA / 자바 Stream
JAVA / 자바 Stream
Stream
: 데이터의 흐름. 배열 또는 컬렉션 인스턴스에 함수 여러 개를 조합해서 원하는 결과를 필터링하고 가공된 결과를 얻을 수 있다. 또한 람다식을 이용해서 코드의 양을 줄이고 간결하게 표현할 수 있습니다.
즉, 배열과 컬렉션을 함수형으로 처리할 수 있습니다.
<자주사용되는 메소드>
Stream() : Stream타입으로 변경(stream에 정의된 기능들을 사용할 수 있는 상태로 변경)
map() : 기존의 데이터를 다른 데이터로 변경
filter() : 조건식을 전달하여 true인 값만 추출
collect() : 결과를 원하는 타입으로 변경
sorted() : 오름차순 정렬
IntStream.range(start, end) : 시작범위와 끝범위를 정해준 여러개의 값을 생성할때 사용. end는 포함시키지 않음.
[예제] - Stream()과 람다식을 이용한 다양한 예제
//1~100까지 ArrayList에 담기 ArrayList datas = new ArrayList<>(); IntStream.range(0, 100).forEach(i-> datas.add(i+1)); System.out.println(datas);
//ABCDEF를 각 문자별로 출력하기 String data = "ABCDEF"; data.chars().forEach(c -> System.out.println((char)c)); //BCDEFG로 변경해서 출력 data.chars().map(c->c+1).forEach(c -> System.out.println((char)c)); //C 빼고 출력 data.chars().filter(c->c!=67).forEach(c->System.out.println((char)c));
//정렬 ArrayList datas = new ArrayList<>(Arrays.asList(10,40,20,30)); // :: -> void 또는 매개변수가 없는 경우 참조형 사용이 가능하다. //오름차순 datas.stream().sorted().collect(Collectors.toList()).forEach(System.out::println); //내림차순 datas.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList()).forEach(System.out::println);
//원하는 형식으로 변경 ArrayList datas = new ArrayList<>(Arrays.asList("black","white","red","yellow")); // joining : 각 요소를 원하는 구분점으로 분리하여 문자열로 리턴한다. System.out.println(datas.stream().collect(Collectors.joining(" "))); //대문자로 변경 System.out.println("abc".toUpperCase());
//전체 대문자로 변경 후 출력 ArrayList datas = new ArrayList<>(Arrays.asList("black","white","red","yellow")); datas.stream().map(String::toUpperCase).collect(Collectors.toList()).forEach(System.out::println); //맨 앞글자만 대문자로 변경 후 출력 datas.stream().map(c-> c.charAt(0) >= 97 && c.charAt(0) <= 122 ? c.replace(c.charAt(0), (char)(c.charAt(0)-32)) : c ) .forEach(System.out::println);
from http://lyrical-hyun.tistory.com/28 by ccl(A) rewrite - 2021-12-19 15:27:59