728x90
반응형
간단한 계층 구조 구현을 위해 Enum을 활용할 수 있습니다.
@Getter
public enum EnumHierarchy {
A("에이", null),
AA("에이에이", A),
AB("에이비", A),
AC("에이씨", A),
ACA("에이씨에이", AC),
ACB("에이씨비", AC),
AD("에이디", A),
B("비", null),
C("씨", null),
D("디", null),
DA("디에이", D),
;
private String name;
private EnumHierarchy parent;
private List<EnumHierarchy> children = new ArrayList<>();
EnumHierarchy(String name, EnumHierarchy parent) {
this.name = name;
this.parent = parent;
if (this.parent != null) {
this.parent.addChild(this);
}
}
private void addChild(EnumHierarchy child) {
for (EnumHierarchy c = this; c != null; c = c.parent) {
c.children.add(child);
}
}
/**
* 상위 모두 조회
*
* @return List
*/
public List<EnumHierarchy> parents() {
List<EnumHierarchy> parents = new ArrayList<>();
for (EnumHierarchy c = this; c.parent != null; c = c.parent) {
parents.add(c.parent);
}
return parents;
}
/**
* 최상위 회사 조회
*
* @return EnumHierarchy
*/
public EnumHierarchy topParent() {
EnumHierarchy parent = null;
for (EnumHierarchy c = this; c != null; c = c.parent) {
if (c.parent == null) {
parent = c;
}
}
return parent;
}
/**
* 하위 모두 조회
*
* @return List
*/
public List<EnumHierarchy> children() {
return this.children;
}
/**
* 상위 체크
*
* @param parentCd String
* @return boolean
*/
public boolean isParent(String parentCd) {
try {
EnumHierarchy parent = valueOf(parentCd);
for (EnumHierarchy c = this; c != null; c = c.parent) {
if (parent == c) {
return true;
}
}
} catch (Exception ignored) {}
return false;
}
/**
* 하위 체크
*
* @param childCd String
* @return boolean
*/
public boolean isChildren(String childCd) {
try {
EnumHierarchy child = valueOf(childCd);
for (EnumHierarchy c : this.children()) {
if (child == c) {
return true;
}
}
} catch (Exception ignored) {}
return false;
}
}
아래와 같이 사용할 수 있습니다.
EnumHierarchy.A.children(); // AA, AB, AC, ACA, ACB, AD
EnumHierarchy.ACB.parents(); // A, AC
EnumHierarchy.ACB.topParent(); // A
EnumHierarchy.A.isChildren("DA"); // false
EnumHierarchy.D.isChildren("DA"); // true
[Reference]
728x90
반응형
'java' 카테고리의 다른 글
[Java] LocalDateTime format to string, LocalDateTime parse string (0) | 2021.06.11 |
---|---|
[Java] POI 라이브러리로 엑셀에 이미지 삽입하기 (0) | 2021.05.07 |
[java] 쿠키 생성, 삭제와 browser's cookie max size (0) | 2021.01.08 |
[Java8] 중복 데이터 제거를 위한 Stream distinct (0) | 2020.10.31 |
[java] StringBuffer getChars (Chars to String) (0) | 2020.10.31 |
댓글