From 0450f803abe370af33acfca6ed35d90782921a54 Mon Sep 17 00:00:00 2001 From: jihyeon baek Date: Mon, 8 Jul 2024 17:42:33 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EC=8B=9C=EC=A6=8C=20=EA=BD=83=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/flower/service/FlowerService.java | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/fiurinee/domain/flower/service/FlowerService.java b/src/main/java/com/example/fiurinee/domain/flower/service/FlowerService.java index 2941a5b..23d743a 100644 --- a/src/main/java/com/example/fiurinee/domain/flower/service/FlowerService.java +++ b/src/main/java/com/example/fiurinee/domain/flower/service/FlowerService.java @@ -18,9 +18,7 @@ import java.net.URL; import java.nio.charset.Charset; import java.time.LocalDate; -import java.util.List; -import java.util.Map; -import java.util.Random; +import java.util.*; import java.util.stream.Collectors; @Service @@ -106,12 +104,47 @@ public List getSeasonFlowers() { return List.of(); } - Random random = new Random(); - List randomFlowers = flowers.stream() - .skip(random.nextInt(flowers.size() - 5 + 1)) // random skip - .limit(5) + // '카네이션'을 포함한 꽃 필터링 + List carnationFlowers = flowers.stream() + .filter(flower -> flower.getName().contains("카네이션")) + .collect(Collectors.toList()); + + // '장미'를 포함한 꽃 필터링 + List roseFlowers = flowers.stream() + .filter(flower -> flower.getName().contains("장미")) .collect(Collectors.toList()); + // '카네이션' 또는 '장미'를 포함하지 않은 나머지 꽃 + List otherFlowers = flowers.stream() + .filter(flower -> !flower.getName().contains("카네이션") && !flower.getName().contains("장미")) + .collect(Collectors.toList()); + + Random random = new Random(); + List randomFlowers = new ArrayList<>(); + + // 카네이션 중 하나를 무작위로 선택 (존재하는 경우) + if (!carnationFlowers.isEmpty()) { + randomFlowers.add(carnationFlowers.get(random.nextInt(carnationFlowers.size()))); + } + + // 장미 중 하나를 무작위로 선택 (존재하는 경우) + if (!roseFlowers.isEmpty()) { + randomFlowers.add(roseFlowers.get(random.nextInt(roseFlowers.size()))); + } + + // 나머지 꽃들 중에서 무작위로 선택하여 5개가 되도록 채움 + int remainingCount = 5 - randomFlowers.size(); + if (remainingCount > 0) { + List selectedOtherFlowers = otherFlowers.stream() + .skip(random.nextInt(otherFlowers.size() - remainingCount + 1)) // random skip + .limit(remainingCount) + .collect(Collectors.toList()); + randomFlowers.addAll(selectedOtherFlowers); + } + + // 무작위로 선택된 꽃 리스트를 셔플 + Collections.shuffle(randomFlowers); + return randomFlowers.stream() .map(FlowerResponseDTO::of) .collect(Collectors.toList());