gpt4 book ai didi

java - ComparatorChain 与将属性转换为字符串并进行比较

转载 作者:行者123 更新时间:2023-12-01 14:11:07 26 4
gpt4 key购买 nike

我有一个元素列表。每个元素都有四个 props。

  1. A Date Obj.
  2. An Enum Obj (values are {E-4,D-3,C-2,B-1,A-0})
  3. Another Date Obj
  4. Another Date Obj.

目前,我正在使用 comparator[MyObjComparator] 对列表进行排序,其中我将每个 Prop 转换为 String 并将字符串附加到 StringBuilder 然后比较结果字符串。我使用 dateFormat 作为 yyyyMMddHHmmss

另一种方法可以是使用compatorChain。我可以在 MyObjComparator 中创建一些内部比较器类 [我们无法避免使用它。所有 impl 都必须进入compareTo]并将它们添加到构建比较器链并使用它。

现在我的问题是哪一个在性能或生命周期方面会更好?

编辑1:所有四个属性都应包含在比较中。添加代码快照1. 单独检查每个属性

 package com.poc.MultiPropComparator.service;

import java.util.Comparator;
import java.util.Date;
import com.poc.MultiPropComparator.domain.MyDomainObject;
import com.poc.MultiPropComparator.domain.PropertyType;

public class MyDomainObjectComparator implements Comparator<MyDomainObject>{

@Override
public int compare(MyDomainObject o1, MyDomainObject o2) {

Date recordDate1 = o1.getRecordDate();
Date recordDate2 = o2.getRecordDate();

if(recordDate1.compareTo(recordDate2)==0){
return compareType(o1,o2);
}
return recordDate1.compareTo(recordDate2);
}

private int compareType(MyDomainObject o1, MyDomainObject o2) {

PropertyType type1 = o1.getType();
PropertyType type2 = o2.getType();

if(type1.compareTo(type2)==0){
return compareStartDate(o1,o2);
}

return type1.compareTo(type2);
}

private int compareStartDate(MyDomainObject o1, MyDomainObject o2) {

Date startDate1 = o1.getStartDate();
Date startdDate2 = o2.getStartDate();

if(startDate1.compareTo(startdDate2)==0){
return compareEndDate(o1,o2);
}
return startDate1.compareTo(startdDate2);
}

private int compareEndDate(MyDomainObject o1, MyDomainObject o2) {
Date endDate1 = o1.getEndDate();
Date endDate2 = o2.getEndDate();

return endDate1.compareTo(endDate2);
}


}

最佳答案

一个 ComparatorChain (您指的是 Apache Commons 类,对吧?),它具有基于原始(或几乎原始)类型的单独比较器,而不是 String 转换。拥有更好的性能(如果不是更好的话)。特别是,ComparatorChain 一旦做出决定就停止评估(非常类似于快捷方式 and (&&) 和快捷方式 or (||) >) 运算符)。在基于 String 的比较中,您需要在开始比较之前完整生成两个比较 String(除非您想混合使用这两种方案,这不会产生任何结果)感)。

就生命周期而言,字符串连接将在 10,000 年失败。这是肯定的。开玩笑吧,ComparatorChain 策略更容易维护,并且支持对 enum 进行可能的修改,以及以更好的方式添加字段进行比较。

关于java - ComparatorChain 与将属性转换为字符串并进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514575/

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