Skip to content

Commit 14012a0

Browse files
GachchinamatGachchinamat
authored andcommitted
Enum examples for java8
1 parent c8121c1 commit 14012a0

4 files changed

Lines changed: 201 additions & 0 deletions

File tree

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package com.baeldung.enums;
2+
3+
import java.util.EnumMap;
4+
import java.util.EnumSet;
5+
import java.util.List;
6+
import java.util.stream.Collectors;
7+
8+
public class Pizza {
9+
10+
private static EnumSet<PizzaStatusEnum> deliveredPizzaStatuses =
11+
EnumSet.of(PizzaStatusEnum.DELIVERED);
12+
13+
private PizzaStatusEnum status;
14+
15+
public enum PizzaStatusEnum {
16+
ORDERED (5){
17+
@Override
18+
public boolean isOrdered() {
19+
return true;
20+
}
21+
},
22+
READY (2){
23+
@Override
24+
public boolean isReady() {
25+
return true;
26+
}
27+
},
28+
DELIVERED (0){
29+
@Override
30+
public boolean isDelivered() {
31+
return true;
32+
}
33+
};
34+
35+
private int timeToDelivery;
36+
37+
public boolean isOrdered() {return false;}
38+
39+
public boolean isReady() {return false;}
40+
41+
public boolean isDelivered(){return false;}
42+
public int getTimeToDelivery() {
43+
return timeToDelivery;
44+
}
45+
46+
private PizzaStatusEnum (int timeToDelivery) {
47+
this.timeToDelivery = timeToDelivery;
48+
}
49+
}
50+
51+
public PizzaStatusEnum getStatus() {
52+
return status;
53+
}
54+
55+
public void setStatus(PizzaStatusEnum status) {
56+
this.status = status;
57+
}
58+
59+
public boolean isDeliverable() {
60+
return this.status.isReady();
61+
}
62+
63+
public void printTimeToDeliver() {
64+
System.out.println("Time to delivery is " + this.getStatus().getTimeToDelivery() + " days");
65+
}
66+
67+
public static List<Pizza> getAllUndeliveredPizzas(List<Pizza> input) {
68+
return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList());
69+
}
70+
71+
public static EnumMap<PizzaStatusEnum, List<Pizza>> groupPizzaByStatus(List<Pizza> pzList) {
72+
EnumMap<PizzaStatusEnum, List<Pizza>> map = pzList.stream().collect(
73+
Collectors.groupingBy(Pizza::getStatus,
74+
() -> new EnumMap<PizzaStatusEnum, List<Pizza>>(PizzaStatusEnum.class), Collectors.toList()));
75+
return map;
76+
}
77+
78+
public void deliver() {
79+
if (isDeliverable()) {
80+
PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this);
81+
this.setStatus(PizzaStatusEnum.DELIVERED);
82+
}
83+
}
84+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.enums;
2+
3+
public enum PizzaDeliveryStrategy {
4+
EXPRESS {
5+
@Override
6+
public void deliver(Pizza pz) {
7+
System.out.println("Pizza will be delivered in express mode");
8+
}
9+
},
10+
NORMAL {
11+
@Override
12+
public void deliver(Pizza pz) {
13+
System.out.println("Pizza will be delivered in normal mode");
14+
}
15+
};
16+
17+
public abstract void deliver(Pizza pz);
18+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.enums;
2+
3+
4+
public enum PizzaDeliverySystemConfiguration {
5+
INSTANCE ;
6+
private PizzaDeliverySystemConfiguration() {
7+
//Do the configuration initialization which
8+
// involves overriding defaults like delivery strategy
9+
}
10+
11+
private PizzaDeliveryStrategy deliveryStrategy = PizzaDeliveryStrategy.NORMAL;
12+
13+
public static PizzaDeliverySystemConfiguration getInstance() {
14+
return INSTANCE;
15+
}
16+
17+
public PizzaDeliveryStrategy getDeliveryStrategy() {
18+
return deliveryStrategy;
19+
}
20+
21+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.baeldung.enums;
2+
3+
4+
import org.junit.Test;
5+
6+
import java.util.ArrayList;
7+
import java.util.EnumMap;
8+
import java.util.List;
9+
10+
import static junit.framework.TestCase.assertTrue;
11+
12+
public class PizzaTest {
13+
@Test
14+
public void givenPizaOrder_whenReady_thenDeliverable() {
15+
Pizza testPz = new Pizza();
16+
testPz.setStatus(Pizza.PizzaStatusEnum.READY);
17+
assertTrue(testPz.isDeliverable());
18+
}
19+
20+
@Test
21+
public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() {
22+
List<Pizza> pzList = new ArrayList<Pizza>();
23+
Pizza pz1 = new Pizza();
24+
pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED);
25+
26+
Pizza pz2 = new Pizza();
27+
pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED);
28+
29+
Pizza pz3 = new Pizza();
30+
pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED);
31+
32+
Pizza pz4 = new Pizza();
33+
pz4.setStatus(Pizza.PizzaStatusEnum.READY);
34+
35+
pzList.add(pz1);
36+
pzList.add(pz2);
37+
pzList.add(pz3);
38+
pzList.add(pz4);
39+
40+
List<Pizza> undeliveredPzs = Pizza.getAllUndeliveredPizzas(pzList);
41+
assertTrue(undeliveredPzs.size() == 3);
42+
}
43+
44+
@Test
45+
public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() {
46+
47+
List<Pizza> pzList = new ArrayList<Pizza>();
48+
Pizza pz1 = new Pizza();
49+
pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED);
50+
51+
Pizza pz2 = new Pizza();
52+
pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED);
53+
54+
Pizza pz3 = new Pizza();
55+
pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED);
56+
57+
Pizza pz4 = new Pizza();
58+
pz4.setStatus(Pizza.PizzaStatusEnum.READY);
59+
60+
pzList.add(pz1);
61+
pzList.add(pz2);
62+
pzList.add(pz3);
63+
pzList.add(pz4);
64+
65+
EnumMap<Pizza.PizzaStatusEnum, List<Pizza>> map = Pizza.groupPizzaByStatus(pzList);
66+
assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1);
67+
assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2);
68+
assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1);
69+
}
70+
71+
@Test
72+
public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() {
73+
Pizza pz = new Pizza();
74+
pz.setStatus(Pizza.PizzaStatusEnum.READY);
75+
pz.deliver();
76+
assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED);
77+
}
78+
}

0 commit comments

Comments
 (0)