필터링
필터링: 스트림을 구성하는 데이터 중 일부를 조건에 따라 걸러내는 연산
Stream<T> filter(Predicate<? super T> predicate) // Stream<T>에 존재
// Predicate<T> boolean test(T t)
public static void main(String[] args) {
int[] ar = {1, 2, 3, 4, 5};
Arrays.stream(ar) // 배열 기반 스트림 생성
.filter(n -> n%2 == 1) // 홀수만 통과시킨다.
.forEach(n -> System.out.print(n + "\t"));
System.out.println();
List<String> sl = Arrays.asList("Toy", "Robot", "Box");
sl.stream() // 컬렉션 인스턴스 기반 스트림 생성
.filter(s -> s.length() == 3) // 길이가 3이면 통과시킨다.
.forEach(s -> System.out.print(s + "\t"));
System.out.println();
}
1 3 5
Toy Box
맵핑1
"Box", "Robot", "Simple"⇨ 3, 5, 6
public static void main(String[] args) {
List<String> ls = Arrays.asList("Box", "Robot", "Simple");
ls.stream()
.map(s -> s.length())
.forEach(n -> System.out.print(n + "\t"));
System.out.println();
}
<R> Stream<R> map(Function<? super T, ? extends R> mapper)
// Function<T, R> R apply(T t)
3 5 6
맵핑 1 : map의 친구들
IntStream mapToInt(ToIntFunction<? super T> mapper)
LongStream mapToLong(ToLongFunction<? super T> mapper)
DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper)
public static void main(String[] args) {
List<String> ls = Arrays.asList("Box", "Robot", "Simple");
ls.stream()
.mapToInt(s -> s.length())
.forEach(n -> System.out.print(n + "\t"));
System.out.println();
}
3 5 6
맵핑 2 : 필터링 후 맵핑의 예
class ToyPriceInfo { // 장난감 모델 별 가격 정보
private String model; // 모델 명
private int price; // 가격
public ToyPriceInfo(String m, int p) {
model = m;
price = p;
}
public int getPrice() {
return price;
}
}
public static void main(String[] args) {
List<ToyPriceInfo> ls = new ArrayList<>();
ls.add(new ToyPriceInfo("GUN_LR_45", 200));
ls.add(new ToyPriceInfo("TEDDY_BEAR_S_014", 350));
ls.add(new ToyPriceInfo("CAR_TRANSFORM_VER_7719", 550));
int sum = ls.stream()
.filter(p -> p.getPrice() < 500)
.mapToInt(t -> t.getPrice())
.sum();
System.out.println("sum = " + sum);
}
sum = 550
'# 02 > Java' 카테고리의 다른 글
[윤성우 열혈자바] 30-1. 스트림의 생성과 연결 (0) | 2019.10.28 |
---|---|
[윤성우 열혈자바] 29-3. 리덕션, 병렬 스트림 (0) | 2019.10.28 |
[윤성우 열혈자바] 29-1. 스트림의 이해와 스트림의 생성 (0) | 2019.10.28 |
[윤성우 열혈자바] 28-3. OptionalInt, OptionalLong, OptionalDouble 클래스 (0) | 2019.10.28 |
[윤성우 열혈자바] 28-2. Optional 클래스 (0) | 2019.10.28 |