Java8 부터 지원되기 시작한 기능. 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴. 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 간결한 표현으로 작성 가능. 내부 반복자를 사용하므로 병렬처리가 쉽다.
자바의 스트림을 사용하려면 우선 스트림 객체
를 생성해야한다.
컬렉션 객체에서 stream()
메소드를 호출하면 스트림 객체를 만들 수 있다.
스트림 객체가 뽑아내는 데이터 중 특정 데이터들만 걸러내거나 데이터에 대해 가공할 수 있다.
데이터를 가공해주는 메소드들은 가공된 결과를 생성해주는 스트림 객체를 리턴한다.
filter()
는 스트림에서 뽑아져 나오는 데이터에서 특정 데이터들만 골라내는 역할을 한다.
Predicate
: Predicate를 파라미터로 받아서 Predicate가 true인 모든 요소를 포함하는 스트림을 반환하는 메서드
Predicate.not()
: Predicate 함수형 인터페이스의 static 메서드로 Predicate를 인자로 받아서 그 결과를 반전시키는 메서드
map()
은 스트림에서 뽑아져 나오는 데이터에 변경을 가해준다.
컬렉션의 엘리먼트 중 일부를 필터링하고 값을 변형해서 또 다른 컬렉션으로 만든다.
collect() 메소드를 이용해 뽑아져 나오는 데이터들을 컬렉션으로 모아둘 수 있다.
collect() 메소드에는 Collector 메소드를 사용할 수 있다. Collector 클래스에 있는 정적 메소드를 이용해서 뽑아져나오는 객체들을 원하는 컬렉션으로 만들 수 있다.
Collector.toList()
: 리스트로 만들기Collector.toSet()
: Set으로 만들기스트림에서 뽑아져 나오는 값에 대해서 어떤 작업을 하고 싶을 때 forEach()
메소드를 사용한다.
어떤 값을 리턴하지는 않는다.
매칭 메서드 : 스트림 클래스의 최종 처리 단계에서 요소들이 특정 조건을 만족하는지 조사할 수 있도록 제공한 메서드.
allMatch()
: 모든 요소들이 매개값(Predicate)으로 주어진 조건을 만족하는지 조사anyMatch()
: 최소한 한 개의 요소가 주어진 조건에 만족하는지 조사noneMatch()
: 모든 요소들이 주어진 조건을 만족하지 않는지 조사result : 리스트, filterList : 리스트
result리스트의 각 데이터(값)에서 filterList에 들어있는 값이 하나라도 있는지 조사.
List<DataMap> returnResult = result.stream()
.filter(x -> finalFilterList.stream()
.anyMatch(y -> x.getString("RCVAD1").contains(y))
)
.collect(Collectors.toList());
result리스트의 각 데이터(값)에서 filterList에 들어있는 값이 하나라도 있는지 조사하여 해당하지 않는 것을 리스트로 반환.
List<DataMap> returnResult = result.stream()
.filter(Predicate.not(x -> finalFilterList.stream()
.anyMatch(y -> x.getString("RCVAD1").contains(y)))
)
.collect(Collectors.toList());