Skip to content

Commit 9cd543c

Browse files
authored
Create E20250811 Future, Reactive 연습.md
1 parent 810794d commit 9cd543c

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
``` java
2+
public void asIs() {
3+
var deviceIds = new ArrayList<String>();
4+
var windowSize = 5;
5+
var hasNextCount = windowSize;
6+
var page = 0;
7+
while(hasNextCount == windowSize) {
8+
var futures = new ArrayList<CompletableFuture<PlatformUserDevicesResponse>>();
9+
for (var i = 1; i <= windowSize; i++) {
10+
var pageNumber = windowSize * page + i;
11+
futures.add(getDeviceListWithPage(pageNumber));
12+
}
13+
var deviceResponses = futures.stream()
14+
.map(CompletableFuture::join)
15+
.toList();
16+
hasNextCount = (int) deviceResponses.stream()
17+
.filter(res -> res.hasNext)
18+
.count();
19+
deviceResponses.stream()
20+
.filter(res -> !res.isEmpty())
21+
.map(res -> res.deviceId)
22+
.forEach(deviceIds::add);
23+
page++;
24+
}
25+
System.out.println(deviceIds);
26+
}
27+
28+
private final AtomicInteger index = new AtomicInteger(1);
29+
30+
@SneakyThrows
31+
private CompletableFuture<PlatformUserDevicesResponse> getDeviceListWithPage(int page) {
32+
log.info("Api call page : {} {}", page, System.currentTimeMillis());
33+
var i = index.getAndIncrement();
34+
if(i > 14) {
35+
return CompletableFuture.supplyAsync(() -> {
36+
sleep(1000);
37+
return new PlatformUserDevicesResponse(false, null);
38+
});
39+
}
40+
return CompletableFuture.supplyAsync(() -> {
41+
sleep(1000);
42+
return new PlatformUserDevicesResponse(true, i+ "");
43+
});
44+
}
45+
```

0 commit comments

Comments
 (0)