11package lotto .domain ;
22
3+ import java .util .Arrays ;
4+
35public enum LottoRank {
4- MISS (0 ,0 ),
5- THIRD (3 , 5_000 ),
6- FOUR (4 , 50_000 ),
7- FIVE (5 , 1_500_000 ),
8- SIX (6 , 2_000_000_000 ),
6+ FIRST (6 , 2_000_000_000 , false ),
7+ SECOND (5 , 30_000_000 , true ),
8+ THIRD (5 , 1_500_000 , false ),
9+ FOURTH (4 , 50_000 , false ),
10+ FIFTH (3 , 5_000 , false ),
11+ MISS (0 , 0 , false ),
912 ;
1013
1114 private final int matchCnt ;
1215 private final int prizeMoney ;
16+ private final boolean bonusMatched ;
1317
14- LottoRank (int matchCnt , int prizeMoney ) {
18+ LottoRank (int matchCnt , int prizeMoney , boolean bonusMatched ) {
1519 this .matchCnt = matchCnt ;
1620 this .prizeMoney = prizeMoney ;
21+ this .bonusMatched = bonusMatched ;
22+ }
23+
24+ public static LottoRank getLottoRank (int matchCnt , boolean bonusMatched ) {
25+ return Arrays .stream (values ())
26+ .filter (rank -> rank .matches (matchCnt , bonusMatched ))
27+ .findFirst ()
28+ .orElse (MISS );
1729 }
1830
19- public static LottoRank getLottoRank (int matchCnt ) {
20- for (LottoRank lottoRank : LottoRank .values ()) {
21- if (lottoRank .matchCnt == matchCnt ) {
22- return lottoRank ;
23- }
31+ private boolean matches (int matchCnt , boolean bonusMatched ) {
32+ if (this .matchCnt != matchCnt ) {
33+ return false ;
2434 }
25- return LottoRank .MISS ;
35+
36+ if (matchCnt == 5 ) {
37+ return this .bonusMatched == bonusMatched ;
38+ }
39+
40+ return true ;
2641 }
2742
43+
2844 public int getMatchCnt () {
2945 return matchCnt ;
3046 }
@@ -33,6 +49,16 @@ public int getPrizeMoney() {
3349 return prizeMoney ;
3450 }
3551
52+ public String getMessage (int count ) {
53+ if (this == SECOND ) {
54+ return String .format ("%d개 일치, 보너스 볼 일치 (%d원) - %d개" ,
55+ matchCnt , prizeMoney , count );
56+ }
57+ return String .format ("%d개 일치 (%d원) - %d개" ,
58+ matchCnt , prizeMoney , count );
59+ }
60+
61+
3662 public boolean isAddAble () {
3763 return this != LottoRank .MISS ;
3864 }
0 commit comments