티스토리 뷰
● 도입
- 중복되는 데이터가 제거된 stream을 return 한다.
[Stream interface에 있는 distinct method]
public interface Stream<T> extends BaseStream<T, Stream<T>> {
Stream<T> distinct();
}
● 실습
1. 중복된 숫자 제거
package com.fastcampus.functionalprogramming.chapter6;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Chapter6Section6 {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(3, -5, 4, -5, 2, 3);
List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());
System.out.println(distinctNumbers);
}
}
2.
①. orders List에서
②. createdByUserId만 추출해서
③. 중복되는 createdByUserId는 제거하고
④. 정렬된
⑤. createdByUserId가 담긴 List를 만들자.
package com.fastcampus.functionalprogramming.chapter6.model;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
public class Order {
private long id;
private LocalDateTime createdAt;
private long createdByUserId;
private OrderStatus status;
private BigDecimal amount;
private List<OrderLine> orderLines;
public enum OrderStatus {
CREATED,
IN_PROGRESS,
ERROR,
PROCESSED
}
public long getId() {
return id;
}
public Order setId(long id) {
this.id = id;
return this;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public Order setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
return this;
}
public long getCreatedByUserId() {
return createdByUserId;
}
public Order setCreatedByUserId(long createdByUserId) {
this.createdByUserId = createdByUserId;
return this;
}
public OrderStatus getStatus() {
return status;
}
public Order setStatus(OrderStatus status) {
this.status = status;
return this;
}
public BigDecimal getAmount() {
return amount;
}
public Order setAmount(BigDecimal amount) {
this.amount = amount;
return this;
}
public List<OrderLine> getOrderLines() {
return orderLines;
}
public Order setOrderLines(List<OrderLine> orderLines) {
this.orderLines = orderLines;
return this;
}
@Override
public String toString() {
return "Order [id=" + id + ", " + (createdAt != null ? "createdAt=" + createdAt + ", " : "")
+ "createdByUserId=" + createdByUserId + ", " + (status != null ? "status=" + status + ", " : "")
+ (amount != null ? "amount=" + amount + ", " : "")
+ (orderLines != null ? "orderLines=" + orderLines : "") + "]";
}
}
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.Order.OrderStatus;
public class Chapter6Section6 {
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);
/*
* 0. orders List에서
* 1. createdByUserId만 추출해서
* 2. 중복되는 createdByUserId는 제거하고
* 3. 정렬된
* 4. createdByUserId가 담긴 List를 만들자.
*/
// OOP 방식으로 했다면 코드가 아래 내용에 비해 매우 길어졌을 것이다.
List<Long> userIds = orders.stream()
.map(Order::getCreatedByUserId)
.distinct()
.sorted()
.collect(Collectors.toList());
System.out.println(userIds);
}
}
'Backend > Java8' 카테고리의 다른 글
#22 Optional(있을 수도 or 없을 수도 = null일 수도 or 아닐수도) (0) | 2022.10.11 |
---|---|
#21 Stream - flatMap(스트림의 스트림을 납작하게) (0) | 2022.10.10 |
#19 Stream - Sorted(데이터의 정렬) (0) | 2022.10.08 |
#18 Stream - Stream의 구성 요소 (0) | 2022.10.07 |
#17 Stream - Map(데이터의 변형) (0) | 2022.10.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- git
- 빅데이터
- Phaser3
- Spring Boot
- Phaser
- 메모리
- node.js
- SQL
- 코테
- OS
- SpringBoot
- MongoDB
- API
- 코딩테스트
- 프로세스
- db
- 알고리즘
- 자료구조
- MySQL
- Stream
- 운영체제
- DART
- Advanced Stream
- jpa
- java
- Java8
- nosql
- 프로그래머스
- spring
- 빅데이터 분석기사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함