gpt4 book ai didi

java - 如何在对象之间建立链接/关系?

转载 作者:行者123 更新时间:2023-12-04 01:02:37 28 4
gpt4 key购买 nike

public class MainClass {
ArrayList<Man> mans = new ArrayList<Man>();
// I'm filling in this arraylist, but I'm not writing those parts because I want to summarize the
//code.
}

public class Man {
int index_father, index_son;
String name;
public Man(String name){
this.name = name;
}
}

这个男人社区中的一些人有父子关系。我的问题是:
我正在寻找一种更简洁的方式来建立这种父子关系。

我尝试用整数建立这种关系(例如:which_father 显示该男子的父亲在“男子”列表中所在的目录)但这有一些缺点:
1-创建对象时,我总是必须在父亲之后创建儿子。因为:

private void createMan() {
Man man = new Man("Ethan");
man.index_father = 4;
mans.add(man);
mans.get(4).index_son = mans.indexOf(man);
}

如果我们还没有创造出父亲,那么人类的第四个元素就不会被创造出来。
2- 如果我从 mans arraylist 中删除一个元素,which_fathers 将不会显示正确的父亲 man。

我可能对 Java 了解不够,但一定有一种简单的方法可以在对象之间建立联系(比如本例中的父子关系),对吧?

最佳答案

您可以添加 List<Man>Man中代表儿子类:

public class Man {
String name;
List<Man> sons = new ArrayList<>();

public Man(String name){
this.name = name;
}
}

编辑:

我认为 OOP 可以帮助简化事情:

public class Person {
Sex sex;
String name;
List<Person> children = new ArrayList<>();
Person partner; // husband/wife

public Person(String name, Sex sex){
this.name = name;
this.sex = sex;
}

public void marryTo(Person person){
this.partner = person;
person.setPartner(person);
}

public void setChildFromMarriage(Person child){
children.add(child);
partner.getChildren().add(child);
}

public enum Sex {
MAN, WOMAN
}
}

你可以保留一个List<Person> .

用法:

List<Person> people = Arrays.asList(
new Person("Jordan", Person.Sex.MAN),
new Person("Tim", Person.Sex.MAN),
new Person("Sarah", Person.Sex.WOMAN)
);

// Let's marry Jordan to Sarah
Person jordan = getPersonByName(people, "Jordan");
Person sarah = getPersonByName(people, "Sarah");
jordan.marryTo(sarah);

Person child = new Person("Jordan Jr", Person.Sex.MAN);
// We can add the child to people list if we want
jordan.setChildFromMarriage(child);

// Let's change their child name using Sarah's reference.
getPersonByName(sarah.getChildren(), "Jordan Jr").setName("Bob");

System.out.println(child.getName()); // Bob

private static Person getPersonByName(List<Person> people, String name) {
return people.stream()
.filter(person -> person.getName().equals(name))
.findFirst()
.get();
}

输出:

Bob

关于java - 如何在对象之间建立链接/关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67742353/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com