티스토리 뷰
● 도입
- 데이터가 순서대로 정렬된 stream을 return
- 데이터의 종류에 따라 Comparator가 필요할 수 있다.
[Stream interface에 있는 sorted method]
public interface Stream<T> extends BaseStream<T, Stream<T>> {
Stream<T> sorted();
Stream<T> sorted(Comparator<? super T> comparator);
}
- sorted method 또한 map, filter method와 연결해서 사용할 수 있다.
● 실습
1.
package com.fastcampus.functionalprogramming.chapter6;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.fastcampus.functionalprogramming.chapter6.model.Order;
import com.fastcampus.functionalprogramming.chapter6.model.User;
import com.fastcampus.functionalprogramming.chapter6.model.Order.OrderStatus;
public class Chapter6Section5 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(3, -5, 7, 4);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
System.out.println(numbers);
System.out.println(sortedNumbers);
}
}
2.
package com.fastcampus.functionalprogramming.chapter6;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.fastcampus.functionalprogramming.chapter6.model.Order;
import com.fastcampus.functionalprogramming.chapter6.model.User;
import com.fastcampus.functionalprogramming.chapter6.model.Order.OrderStatus;
public class Chapter6Section5 {
public static void main(String[] args) {
User user1 = new User();
user1.setId(101);
user1.setName("Paul");
user1.setVerified(true);
user1.setEmailAddress("Alice@garden.com");
User user2 = new User();
user2.setId(102);
user2.setName("David");
user2.setVerified(false);
user2.setEmailAddress("Bob@garden.com");
User user3 = new User();
user3.setId(103);
user3.setName("John");
user3.setVerified(false);
user3.setEmailAddress("Charlie@garden.com");
// user는 아무런 기준 없이 sort를 할 수 없기에 무엇을 기준으로 sort를 할 지 알려줘야한다.
List<User> users = Arrays.asList(user1, user2, user3);
// 이름 알파벳 순으로 user 정렬
// ((u1 ,u2) -> u1.getName().compareTo(u2.getName())) == Comparator
List<User> sortedUsers = users.stream()
.sorted((u1 ,u2) -> u1.getName().compareTo(u2.getName()))
.collect(Collectors.toList());
for (User user : users) {
System.out.println(user);
}
System.out.println("========= 정렬 후 =========");
for (User user : sortedUsers) {
System.out.println(user);
}
}
}
3.
package com.fastcampus.functionalprogramming.chapter6;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import com.fastcampus.functionalprogramming.chapter6.model.Order;
import com.fastcampus.functionalprogramming.chapter6.model.User;
import com.fastcampus.functionalprogramming.chapter6.model.Order.OrderStatus;
public class Chapter6Section5 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Seoul"));
Order order1 = new Order();
order1.setId(1001);
order1.setStatus(OrderStatus.CREATED); // enum 사용
order1.setCreatedByUserId(101);
order1.setCreatedAt(now.minusHours(4));
Order order2 = new Order();
order2.setId(1002);
order2.setStatus(OrderStatus.ERROR); // enum 사용
order2.setCreatedByUserId(103);
order2.setCreatedAt(now.minusHours(1));
Order order3 = new Order();
order3.setId(1003);
order3.setStatus(OrderStatus.PROCESSED); // enum 사용
order3.setCreatedByUserId(102);
order3.setCreatedAt(now.minusHours(36));
Order order4 = new Order();
order4.setId(1004);
order4.setStatus(OrderStatus.ERROR); // enum 사용
order4.setCreatedByUserId(104);
order4.setCreatedAt(now.minusHours(40));
Order order5 = new Order();
order5.setId(1005);
order5.setStatus(OrderStatus.IN_PROGRESS); // enum 사용
order5.setCreatedByUserId(101);
order5.setCreatedAt(now.minusHours(10));
List<Order> orders = Arrays.asList(order1, order2, order3, order4, order5);
// createdAt 기준으로 sort
List<Order> sortedOrders = orders.stream()
.sorted((o1, o2) -> o1.getCreatedAt().compareTo(o2.getCreatedAt()))
.collect(Collectors.toList());
for (Order order : sortedOrders) {
System.out.println(order);
}
/*
* 난 sorted에서 아래와 같이 했다.
* .sorted((o1, o2) -> String.valueOf(o1.getCreatedAt()).compareTo(String.valueOf(o2.getCreatedAt())))
*/
}
}
'Backend > Java8' 카테고리의 다른 글
#21 Stream - flatMap(스트림의 스트림을 납작하게) (0) | 2022.10.10 |
---|---|
#20 Stream - Distinct(중복 제거) (0) | 2022.10.09 |
#18 Stream - Stream의 구성 요소 (0) | 2022.10.07 |
#17 Stream - Map(데이터의 변형) (0) | 2022.10.06 |
#16 Stream - Filter (0) | 2022.10.05 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- git
- MongoDB
- 코딩테스트
- Java8
- DART
- MySQL
- 메모리
- Spring Boot
- 자료구조
- 코테
- SQL
- 프로그래머스
- spring
- jpa
- node.js
- API
- SpringBoot
- 운영체제
- Phaser
- db
- Advanced Stream
- nosql
- OS
- java
- Stream
- 빅데이터 분석기사
- Phaser3
- 알고리즘
- 빅데이터
- 프로세스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함