프로그래밍 언어/Java
[Stream] 필터링, 매핑( flatMapXX(), mapXX(), boxed(), distinct(), filter() ) 관련 스트림 메소드
코딩하는흑구
2019. 9. 17. 20:26
필터링
- 중간처리 기능으로 요소를 걸러내는 역할
- distinct() : 중복을 제거하는 메소드
- filter() : 매개값으로 주어진 Pridicate 객체가 true를 반환하는 요소만 필터.
public static void main(String[] args) {
List<String> names = Arrays.asList("가나다","라마바","가나다","차카타","파하");
//이름 중복 제외.
names.stream()
.distinct()
.forEach(System.out::println);
System.out.println();
//"가"로 시작하는 이름만 필터
names.stream()
.filter(n->n.startsWith("가"))
.forEach(System.out::println);
System.out.println();
//중복 없애고 "라"로 시작하는 요소만 필터
names.stream()
.distinct()
.filter(n->n.startsWith("라"))
.forEach(System.out::println);
}
결과
가나다
라마바
차카타
파하
가나다
가나다
라마바
매핑
- 중간처리 기능으로 스트림의 요소를 다른 요소로 대체하는 작업을 한다.
- flatXXX() 와 mapXXX() 그리고 asDoubleStream(), asLongStream(), boxed() 메소드가 있다.
- flatXXX() : 요소를 대체하는 복수개의 요소들로 구성된 새로운 스트림을 리턴.
public static void main(String[] args) {
List<String> input1 = Arrays.asList("java8 lambda","stream mapping");
input1.stream()
.flatMap(data -> Arrays.stream(data.split(" ")))
.forEach(System.out::println);
System.out.println();
List<String> input2 = Arrays.asList("10","20","30","40","50","60");
input2.stream()
.flatMapToInt(data -> {
String[] strArr = data.split(",");
int[] intArr = new int[strArr.length];
for(int i =0; i<strArr.length; i++) {
intArr[i] = Integer.parseInt(strArr[i].trim());
}
return Arrays.stream(intArr);
})
.boxed()//이걸하고 number 타입을 보면 int/Integer로 바뀜.
.forEach(number-> System.out.println(number));
}
결과
java8
lambda
stream
mapping
10
20
30
40
50
60
- mapXXX() : 요소를 대체하는 요소로 구성된 새로운 스트림 리턴.
- asDoubleStream() : IntStream의 int요소나 LongStream의 long 요소를 double 형 DoubleStream으로 캐스팅하여 반환한다.
- boxed() : primitive 타입을 wrapper 타입으로 박싱하여 반환한다.
public static void main(String[] args) {
List<Student> studentList = Arrays.asList(
new Student("가나다",10),
new Student("라마바",20),
new Student("사아자",30)
);
studentList.stream()
.mapToInt(Student::getScore) //student 객체가 가진 score값으로 스트림 재생성.
.boxed() //Integer 타입 Stream으로 변환.
.forEach(score -> System.out.println(score));
//AsDoubleStreamBoxedExample
int[] intArray= {1,2,3,4,5};
IntStream intStream = Arrays.stream(intArray);
intStream
.asDoubleStream()
.forEach(d -> System.out.println(d));
System.out.println();
intStream = Arrays.stream(intArray);
intStream
.boxed() //Integer로 변환.
//obj는 Integer 타입.
.forEach(obj -> System.out.println(obj.intValue()));
}
결과
10
20
30
1.0
2.0
3.0
4.0
5.0
1
2
3
4
5