filter(Predicate<? super T> predicate)
인풋
List<Member> members = new ArrayList<>();
members.add(new Member(1L,"A"));
members.add(new Member(2L,"B"));
members.add(new Member(3L,"C"));
members.add(new Member(4L,"D"));
중간 연산자
List<Member> evenMembers = members.stream()
.filter(member -> member.id % 2 == 0)
.collect(Collectors.toList());
아웃풋
evenMembers.forEach(member -> System.out.println(member.nickname));
결과
map(Function<? super T,? extends R> mapper)
mapToDouble(ToDoubleFunction<? super T> mapper)
mapToInt(ToIntFunction<? super T> mapper)
mapToLong(ToLongFunction<? super T> mapper)
인풋
List<Member> members = new ArrayList<>();
members.add(new Member(1L,"A"));
members.add(new Member(2L,"B"));
members.add(new Member(3L,"C"));
members.add(new Member(4L,"D"));
중간 연산자
List<Member> newMembers = members.stream()
.map(member ->
new Member(member.id, "new "+member.nickname)
)
.collect(Collectors.toList());
아웃풋
evenMembers.forEach(member -> System.out.println(member.nickname));
결과
혹은 식을 세울 수도 있습니다.
List<Member> newMembers = members.stream()
.map(member -> {
String name;
// 조건문 이용
if(member.id % 2 == 1){
name = "odd " + member.nickname;
}else{
name = "even " + member.nickname;
}
// 반환값이 필요
return new Member(member.id, name);
})
.collect(Collectors.toList());
map()과 mapTo000()의 차이는 어떤 타입의 Stream으로 반환되는지의 차이입니다.
다음과 같은 숫자 연산을 할때 Stream 객체라면 숫자 연산 함수가 없지만, DoubleStream등의 타입이라면 숫자 연산 함수가 있습니다.
flatMap(Function<? super T,? extends Stream<? extends R>> mapper)
flatMapToDouble(Function<? super T,? extends DoubleStream> mapper)
flatMapToInt(Function<? super T,? extends IntStream> mapper)
flatMapToLong(Function<? super T,? extends LongStream> mapper)
인풋
List<List<Member>> memberLists = new ArrayList<>();
memberLists.add(Arrays.asList(new Member(1L,"A")));
memberLists.add(Arrays.asList(new Member(2L,"B")));
memberLists.add(Arrays.asList(new Member(3L,"C")));
memberLists.add(Arrays.asList(new Member(4L,"D")));
중간 연산자
List<Member> members= memberLists.stream()
.flatMap(membersL -> membersL.stream())
.collect(Collectors.toList());
//.flatMap(Collection::stream) 로 대체 가능
아웃풋
System.out.println(members.size());
결과
flatMap()과 flatMapTo000()의 차이는 어떤 타입의 Stream으로 반환되는지의 차이입니다.
limit(long maxSize)
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> newIntegers = integers.stream()
.limit(2)
.collect(Collectors.toList());
newIntegers.forEach(integer -> System.out.println(integer));
peek(Consumer<? super T> action)
인풋
List<Member> members = new ArrayList<>();
members.add(new Member(1L,"A"));
members.add(new Member(2L,"B"));
members.add(new Member(3L,"C"));
members.add(new Member(4L,"D"));
중간 연산자
List<Member> evenMember = members.stream()
.filter(member -> member.id % 2 == 0)
.peek(member -> System.out.println(member.nickname))
.collect(Collectors.toList());
결과
skip(long n)
인풋
List<Integer> integers = Arrays.asList(1, 2, 3, 4, 5);
중간 연산자
List<Integer> newIntegers = integers.stream()
.skip(2)
.collect(Collectors.toList());
아웃풋
newIntegers.forEach(integer -> System.out.println(integer));
결과
sorted()
sorted(Comparator<? super T> comparator)
List<Integer> integers = Arrays.asList(3, 2, 4, 1, 5);
List<Integer> newIntegers = integers.stream()
.sorted()
.collect(Collectors.toList());
newIntegers.forEach(integer -> System.out.println(integer));
Comparator에 따라 정렬 기준을 변경할 수 있습니다.
인풋
위와 동일
중간 연산자
List<Integer> newIntegers = integers.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
아웃풋
위와 동일
결과
Comparator은 공식문서에서 확인하실 수 있습니다.
java.util.Comparator