filter의 사용
List<Integer> numbers = Arrays.asList(1,2,1,3,3,2,4);
numbers.stream()
.filter((Integer i) -> i %2 == 0)
.forEach(System.out::println);
distinct의 사용
List<Integer> numbers = Arrays.asList(1,2,1,3,3,2,4);
numbers.stream()
.filter((Integer i) -> i %2 == 0)
.distinct()
.forEach(System.out::println);
https://seopsblog.blogspot.com/2016/05/java8.html
skip() - 요소 건너뛰기
List<Dish> dishes = menu.stream()
.filter(d -> d.getCalories() > 300)
.skip(2)
.collect(Collectors.toList())
;
System.out.println(dishes);
처음 300 칼로리가 넘는 두 항목을 건너뛰고 조건에 해당하는 나머지 요리를 반환
map() - 매핑
오라클의 groupBy라고 생각하면 될 것 같다.
요리의 이름으로 매핑
List<String> dishesmap = menu.stream()
.map(Dish::getName)
.collect(Collectors.toList());
System.out.println(dishesmap);
요리의 이름으로 그룹화한 이후 해당 요리 이름의 길이로 매핑
List<Integer> dishesmap2 = menu.stream()
.map(Dish::getName)
.map(String::length)
.collect(Collectors.toList());
System.out.println(dishesmap2);
위의 조건으로 매핑하기 이전에 필터로 700 칼로리가 넘는 항목으로 필터링
List<String> dishesmap = menu.stream()
.filter(d -> d.getCalories() > 700)
.map(Dish::getName)
.collect(Collectors.toList());
flatMap -스트림 평면화
List<String> strList = Arrays.asList("Hello","World");
List<String[]> collect = strList.stream()
.map(s -> s.split(""))
.distinct()
.collect(Collectors.toList());
해당 스트림의 결과 값의 타입이 List <String []>라는 점에 주목하자
map으로 전달한 람다는 각 단어의 문자열 배열을 반환하기 때문이다.
따라서 이 코드를 출력하려면
for (String[] str : collect) {
for(int i=0;i<str.length; i++) {
System.out.println(str[i]);
}
}
위와 같은 과정을 거쳐야 한다.
우리가 원하는 것은 정확하게 Stream <String>이다. (문자열 배열이 아닌)
해결 방법 1. Arrays.stream 적용
List<Stream<String>> collect = strList.stream()
.map(s -> s.split(""))
.map(Arrays::stream)
.distinct()
.collect(Collectors.toList());
이것 또한 Stream의 리스트를 타입으로 만들어 준다.
map을 스트림화 하는 과정에서 ""로 나누어진 map을 각각의 스트림으로 만들기 때문이다.
flatMap의 등장
List<String> collect = strList.stream()
.map(s -> s.split(""))
.flatMap(Arrays::stream)
.distinct()
.collect(Collectors.toList());
이유는 평 면화된 스트림을 반환하기에 가능한 것이다.
Code Link
https://github.com/mike6321/PURE_JAVA/tree/master/Java8/2Week/lamda
References
|
'Java > Java8' 카테고리의 다른 글
(JAVA8) 함수형 인터페이스와 람다 표현식 (2) (0) | 2020.07.07 |
---|---|
(JAVA8) 함수형 인터페이스와 람다 표현식 (1) (0) | 2020.07.07 |
(JAVA8) 람다식 (2) (0) | 2020.01.19 |
(JAVA8) 람다식으로 향하는 과정 (0) | 2020.01.16 |
(JAVA8) 스트림의 개요 (1) (0) | 2020.01.03 |