【问题标题】:In Java, How to sort an object recursively if it contains a list of same object type在Java中,如果对象包含相同对象类型的列表,如何对其进行递归排序
【发布时间】:2021-09-13 10:52:08
【问题描述】:

我的对象看起来像这样

public class Person implements Comparable<Person>{
    private String name;
    private List<Person> child;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Person> getChild() {
        return child;
    }
    public void setChild(List<Person> child) {
        this.child = child;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", child=" + child + "]";
    }
    @Override
    public int compareTo(Person o) {
        return this.name.compareTo(o.name);
    }
    
}

将其视为一个家庭。有一根人。他有一些孩子,那些孩子有一些孩子等等。 我想以这样一种方式对其进行排序,如果我得到根人的子列表,则该人下的所有人都应该根据名称按字母顺序和递归地排序到其下的所有嵌套。我怎样才能做到这一点?

【问题讨论】:

  • 如果C 有孩子AMM 有孩子FBA 有孩子DY 你的预期订单是多少?最好在问题中添加示例输入和预期输出。

标签: java sorting collections java-8


【解决方案1】:

所以问题是,例如,如果您有 Bill 作为父母,有 3 个孩子 Anna、Veronica 和 Georgia,而 Veronica 有两个孩子 Bobby 和 Matthew,那么您选择应该显示的 Bill:

  1. 安娜
  2. 比尔
  3. 鲍比
  4. 格鲁吉亚
  5. 马修
  6. 维罗妮卡

但如果您选择 Veronica,它应该会显示:

  1. 鲍比
  2. 马修
  3. 维罗妮卡

?

【讨论】:

  • 如果您选择 Bill 的孩子列表,它应该按顺序显示他的孩子 1. Anna, 2. Georgia 3. Veronica 而 Veronica 的孩子列表应该是 1. Bobby 2. Mathew
【解决方案2】:
public void sort (Person person) {
        if (person.getChild() != null && !person.getChild().isEmpty()) {
            // Sort the child
            Collections.sort(person.getChild());
            
            // Sort for each child as parent
            for (Person child : person.getChild()) {
                sort(child);
            }
        }
        
    }

测试一下

public void testPersonsSort() {
        Person bill = new Person();
        bill.setName("Bill");
        
        Person georgia = new Person();
        georgia.setName("Georgia");
        
        Person anna = new Person();
        anna.setName("Anna");
        
        Person veronica = new Person();
        veronica.setName("Veronica");
        
        List<Person> billsChild = new ArrayList<Person>();
        billsChild.add(georgia);
        billsChild.add(anna);
        billsChild.add(veronica);
        
        bill.setChild(billsChild);
        
        Person mathew = new Person();
        mathew.setName("Mathew");
        
        Person bobby = new Person();
        bobby.setName("Bobby");
        
        List<Person> veronicaChild = new ArrayList<Person>();
        veronicaChild.add(mathew);
        veronicaChild.add(bobby);
        veronica.setChild(veronicaChild);
        
        PersonSort personSort = new PersonSort();
        personSort.sort(bill);
        
        System.out.println(bill);
        
    }

当非空时,每个人和孩子都排序输出

Person [name=Bill, child=[Person [name=Anna, child=null], Person [name=Georgia, child=null], Person [name=Veronica, child=[Person [name=Bobby, child=null], Person [name=Mathew, child=null]]]]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多