【问题标题】:Java Collections and ComparatorJava 集合和比较器
【发布时间】:2018-11-28 11:52:34
【问题描述】:

用例是一种对自定义对象列表进行排序的有效方法

class oC extends A{
  int id;
  ArrayList ocR;
}

class ocR extends A{
  @Override
  public int hashCode() {
    return super.hashCode();
  }

  @Override
  public boolean equals(Object o) {
    return super.equals(o);
  }
} 

oC的每个对象的ArrayList ocR也必须是有序的。

当前的解决方案是我创建了一个实现比较器的排序函数

sort(List items){
  Collections.sort(items, new Comparator(){ //Logic for comparator by 
                                              overriding compare(A a, A b)} 
}

然后我使用下面的代码

List Oc comments;
for(int index=0;index<comments.size();index++){
   //This is for sorting ArrayList ocR of each oC object
   this.sort(comments.get(index).getocRs());
}
//This is for sorting List of oC
this.sort(comments);`

有没有办法在不在 oC 或 oCR 类上实现比较器的情况下取消 for 循环?

【问题讨论】:

    标签: java collections comparator


    【解决方案1】:

    如果您使用的是 Java 8,您可以执行以下操作:

    comments.forEach(oc -> sort(oc.getocRs()))
    

    【讨论】:

    • 这不只是我已经实现的任何东西的简洁形式。与我已经实现的任何东西相比,这如何更有效率?
    • 我以为你想要一个简洁的表格。如果您想要更高的效率,也许您应该评估在Comparable 接口上使用SortedSet 而不是List 和Comparator。
    【解决方案2】:

    列表维护广告订单。更多详情:Why is there no SortedList in Java?

    尝试使用 TreeSet 而不是 List,以便按顺序保留对象

    【讨论】:

    • 即使这解决了在检索后不必对对象进行排序的问题,这也会增加更新已经持久化的对象的成本,因为每次附加所有现有对象时都需要先检索然后需要追加新对象。
    • 您是否希望在添加值后对列表进行排序?那么显然您需要使用 Collection 方法 Sort() 以所需的顺序进行排序。如果您在添加时需要对对象进行排序,那么 Treeset 将是更好的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多