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

标签 java

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/

相关文章:

java - 使用 Lucene 使用时间戳进行地理空间搜索

java - 有什么方法可以中断、终止或以其他方式解除(释放同步锁)单个死锁的 Java 线程,从而允许其他线程继续执行?

java - 如何使用responseBody编写POST操作的请求

java - 如何使用线程运行两个 JOptionPane

java - 我可以在 Android 中使用 google Places API 吗?

java - CXF-http-conf :conduit timeout is being ignored

java - 如何使用字符串规范解析字符串?

java - 是否可以使用 Scanner、PrintWriter 处理 arrayList

java - Cassandra TOKEN分页机制的问题

java - 如何检索存储在 MongoDB 中的子字段