【问题标题】:How to sort objects in java based on from and to value如何根据 from 和 to 值对 java 中的对象进行排序
【发布时间】:2020-07-08 13:59:30
【问题描述】:

我想对类中的以下对象进行排序。每个 Element 对象都有两个字段 from 和 to。这里对于 e1 null is from v0 is to 。我想将元素排序为 (null,v0),(v0,v1).....

public class Test7 {
    
    public static void main(String[] args) {
        
        Element e1 = new Element(null,"v0");
        Element e2 = new Element("v0","v1");
        Element e3 = new Element("v1","v2");        
        Element e4 = new Element("v2","v3");
        Element e5 = new Element("v3","v4");
        Element e6 = new Element("v4","v5");
        
        List<Element> elementList = new ArrayList();
        
        elementList.add(e3);

        elementList.add(e2);
        elementList.add(e1);
        elementList.add(e5);
        elementList.add(e6);

        elementList.add(e4);

    }
}

有人可以帮我解决这个问题吗?

【问题讨论】:

标签: java sorting


【解决方案1】:

你可以这样做:

Collections.sort(elementList);

并覆盖元素内的 compareTo 函数。假设您要将第一个字符串与元素中的第一个字符串进行比较,将第二个字符串与元素中的第二个字符串进行比较,并且您的 Element 类如下所示:

public class Element implements Comparable<Element> {
    private String first;
    private String second;

    public Element(String first, String second) {
        this.first = first;
        this.second = second;
    }

    public String getFirst() {
        return first;
    }

    public String getSecond() {
        return second;
    }

    //you can add this compare to function
    @Override
    public int compareTo(Element other) {
        int compareFirst = compareStrings(first, other.getFirst());
        return compareFirst == 0 ? compareStrings(second, other.getSecond())
                                 : compareFirst;
    }

    private int compareStrings(String s1, String s2) {
        return s1 == null ? -1 : s1.compareTo(s2);
    }
}

【讨论】:

    【解决方案2】:

    你的Element需要实现Comarable接口。

    之后Collections.sort(elementList) 将起作用。

    @Saheb 上面的回答是使用 Comparator 来表示没有 Comparable接口。

    beginner's book 示例详细介绍了该主题。

    【讨论】:

      【解决方案3】:

      感谢您的回答。但我的要求有点不同。我有一个像这样的pojo 类元素{

      private String from;
      private String to;
      
      
      public Element(String from, String to) {
          super();
          this.from = from;
          this.to = to;
      }
      

      }

      如果我在列表中添加对象,我想对对象进行排序,例如 fromVersion->Toversion 示例:对象创建为 (null,v0),(v1,v2),(v0,v1),(v2,v3)... 因此,如果我们对列表进行排序,它将变为 (null,v0),(v0,v1),(v1,v2),(v2,v3)。这里一个对象的版本是下一个对象的版本。我们得到一个对象链。版本中的第一个对象为空。这意味着它没有父对象。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-08
        • 2010-11-16
        • 2013-10-22
        • 1970-01-01
        • 2013-11-25
        • 2017-09-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多