-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathElectronics.java
More file actions
140 lines (105 loc) · 5.17 KB
/
Copy pathElectronics.java
File metadata and controls
140 lines (105 loc) · 5.17 KB
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package me.day05.practice;
import me.day05.practice.Electronic.AuthMethod;
import me.day05.practice.Electronic.CompanyName;
import java.util.*;
public class Electronics {
private static final int DEFAULT_CAPACITY = 10; // Default initial capacity
private static final Electronic[] EMPTY_ELECTRONIC_LIST = {};
private static Electronic[] electronicList;
private static Electronics electronicsInstance;
private int size;
private int capacity;
Electronics(){
electronicList = EMPTY_ELECTRONIC_LIST;
}
// TODO: 1. Electronics 클래스의 객체를 싱글톤으로 생성하는 함수를 작성하시오.
public static Electronics getInstance() {
if (electronicsInstance == null) electronicsInstance = new Electronics();
return electronicsInstance;
}
// TODO: 2. 전자제품 일련번호 productNo를 통해 인자로 주어진 일련번호에 해당하는 전자제품을 반환하는 함수를 작성하시오.
public Optional<Electronic> findByProductNo(String productNo){
for (Electronic electronic : electronicList)
if (productNo.equals(electronic.getProductNo()))
return Optional.of(electronic);
return Optional.empty();
}
// TODO: 3. 전자제품들 중 인자로 주어진 제조 회사를 찾아서 하나의 배열에 반환하는 함수를 작성하시오.
public Optional<Electronic[]> groupByCompanyName(CompanyName company){
List<Electronic> temp = new ArrayList<>();
for (Electronic electronic : electronicList)
// 테스트용 임시 조건 ( electronic != null )
if (electronic != null && electronic.getCompanyName().equals(company))
temp.add(electronic);
Electronic[] companyNameGroup =
temp.isEmpty() ? null : ElectronicArrayUtil.listToArray(temp);
return Optional.ofNullable(companyNameGroup);
}
public Optional<Electronic> findByCompanyName(CompanyName company){
for (Electronic electronic : electronicList)
if (company.equals(electronic.getCompanyName()))
return Optional.of(electronic);
return Optional.empty();
}
// TODO: 4. 전자제품들 중 인자로 주어진 인증 방법을 찾아서 하나의 배열에 반환하는 함수를 작성하시오.
public Optional<Electronic[]> groupByAuthMethod(AuthMethod authMethod){
List<Electronic> temp = new ArrayList<>();
for (Electronic electronic : electronicList)
// 테스트용 임시 조건 ( electronic != null )
if (electronic != null && electronic.isContainAuthMethod(authMethod))
temp.add(electronic);
Electronic[] authMethodNameGroup =
temp.isEmpty() ? null : ElectronicArrayUtil.listToArray(temp);
return Optional.ofNullable(authMethodNameGroup);
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getCapacity() {
return capacity;
}
public void setCapacity(int capacity) {
this.capacity = capacity;
}
@Override
public int hashCode() {
return Objects.hash(Arrays.hashCode(electronicList), size, capacity);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
return Objects.equals(hashCode(), ((Electronics)obj).hashCode());
}
@Override
public String toString() {
return "Users { " +
"size=" + size +
", capacity=" + capacity +
", electronicList= " + Arrays.toString(electronicList) + " }";
}
//==================================== TEST CODE ====================================//
public void add (Electronic electronic) {
if (electronicList == EMPTY_ELECTRONIC_LIST)
electronicList = new Electronic[DEFAULT_CAPACITY];
/* 배열 크기 체크하고 늘리는 로직 구현 할 것 */
electronicList[size++] = electronic;
}
public static void main(String[] args) {
Electronic iPhone13 = new Electronic("아이폰13", CompanyName.APPLE, new AuthMethod[]{AuthMethod.FACE, AuthMethod.PIN, AuthMethod.PATTERN});
Electronic iPhone12 = new Electronic("아이폰12", CompanyName.APPLE, new AuthMethod[]{AuthMethod.FACE, AuthMethod.PIN, AuthMethod.PATTERN});
Electronic galaxyS22 = new Electronic("갤럭시S22", CompanyName.SAMSUNG, new AuthMethod[]{AuthMethod.FINGERPRINT, AuthMethod.PIN, AuthMethod.PATTERN});
Electronics electronics = getInstance();
electronics.add(iPhone13);
electronics.add(iPhone12);
electronics.add(galaxyS22);
// System.out.println(electronics);
Optional<Electronic[]> authMethodGroupPIN = electronics.groupByAuthMethod(AuthMethod.FACE);
authMethodGroupPIN.ifPresent(value -> System.out.println(Arrays.toString(value)));
Optional<Electronic[]> companyNameGroupAPPLE = electronics.groupByCompanyName(CompanyName.SAMSUNG);
companyNameGroupAPPLE.ifPresent(value -> System.out.println(Arrays.toString(value)));
}
}