Hãy xem xét một lớp trong javaTìm hệ thống phân cấp
class Entity {
Integer id;
Integer parentId;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
}
}
Cân nhắc ParentID như chìa khóa nước ngoài (liên quan đến id để đối tượng khác).
Bây giờ tôi đã tạo 6 đối tượng và đặt một số giá trị.
Entity e1 = new Entity();
e1.setId(400);
Entity e2 = new Entity();
e2.setId(300);
e2.setParentId(400);
Entity e3 = new Entity();
e3.setId(200);
e3.setParentId(300);
Entity e4 = new Entity();
e4.setId(100);
e4.setParentId(200);
Entity e5 = new Entity();
e5.setId(50);
e5.setParentId(100);
Entity e6 = new Entity();
e6.setParentId(50);
Bây giờ tôi muốn nhận được thứ bậc của các đối tượng. Điều đó có nghĩa là nếu tôi cung cấp id, tôi sẽ nhận được hệ thống cấp bậc cha và phân cấp con hoàn chỉnh.
cho ví dụ: nếu tôi cung cấp cho 100 như id (đơn vị: e4), tôi sẽ nhận được phân cấp cha con: - e4, e3, e2, e1 hệ thống phân cấp con: - e4, e5, e6
Giải thích: - đối với phân cấp cha: - chúng ta nên thêm đối tượng e4 ban đầu trước tiên. sau đó chúng ta sẽ tìm thấy đối tượng có iD giống như của parent4d của e4 (ở đây e3) quá trình tiếp tục cho đến khi parentid rỗng là cho hệ phân cấp con: - chúng ta nên thêm đối tượng e4 ban đầu trước. sau đó chúng ta sẽ tìm thấy đối tượng có parentId giống với id của e4. (Ở đây e5) quá trình này tiếp tục cho đến khi, các ParentID là null
Giải pháp của tôi cho hệ thống cấp bậc cha mẹ: -
List<Entity> parent = new ArrayList<Entity>();
Entity ent = list.stream().filter(e -> e.getId() == 100).findFirst()
.get(); // // 100 input id value
parent.add(ent);
Integer parentId = ent.getParentId();
while (parentId != null) {
int search = parentId;
Entity newEntity = list.stream().filter(e -> e.getId() == search)
.findFirst().get();
parent.add(newEntity);
parentId = newEntity.getParentId();
}
cho hệ thống phân cấp con:
Entity entnew = list.stream().filter(e -> e.getId() == 100).findFirst()
.get(); // 100 input id value
child.add(entnew);
Integer idNew = entnew.getId();
while (idNew != null) {
int searchNew = idNew;
Entity newEnt = list.stream().filter(f -> f.getParentId()!= null && f.getParentId() == searchNew)
.findFirst().get();
child.add(newEnt);
idNew = newEnt.getId();
}
tôi thấy phương pháp này để giải quyết kịch bản, Nhưng tôi muốn có một giải pháp hiệu quả hơn trong java 8 bằng cách sử dụng các khái niệm cốt lõi của nó để giải quyết vấn đề này.
là bất kỳ lý do nào tại sao bạn giữ 'parentId' thay vì tham chiếu đến cha mẹ? – user902383