按日期获取最新的三个值

时间:2017-10-11 19:40:05

标签: java list sorting date treemap

您好我有以下情况:

我有2个列表:

final List<FirstDO>  firstList;
final List<SecondDO> secondList;

DO(FirstDO,SecondDO)都包含字符串字段和日期字段 其他不同的领域。 让我们假设我们有这些值:

First List包含2个具有以下值的FirstD0-Objects:

First Object:
    1. String field = "test"
    2. Date field = 01.10.2017.
    .....

Second Object:
    1. String field = "test2"
    2. Date field = 05.10.2017.
    .....

第二个列表包含2个具有以下值的SecondDO对象:

First Object:
    1. String field = "test3"
    2. Date field = 06.10.2017.
    .....

Second Object:
    1. String field = "test"
    2. Date field = 07.10.2017.
    .....

Third Object:
    1. String field = "test4"
    2. Date field = 02.10.2017.
     .....

现在我需要迭代两个列表并从两个列表中获取最新的三个字段值按日期排序(降序)。那么这些就是:test,test2和test3。您可能已经注意到&#34; test&#34;包含在两个列表中,但由于在第二个列表中,日期字段(07.10.2017)大于&#34; test4&#34; (02.10.2017)..我需要参加&#34;测试&#34;。

所以我总是需要检索最多三个按日期排序的字段值(降序)。换句话说,如果我合并两个列表,我需要采用最新的三个值。

我尝试使用像这样的TreeMap:

        final Map<Date, String> myTreeMap= new TreeMap<Date, String>();

然后只是迭代两个列表并插入此映射然后它应该按日期自动排序,因为date实现了类似的接口,但是如果我将值设置为相同的日期,它会覆盖,因为地图会有重复的密钥。我不知道如何解决这个问题是最好的方法。

1 个答案:

答案 0 :(得分:0)

Comparable

我希望您的两个数据对象都实现一个公共接口,该接口显示它们都有一个日期并且具有此接口实现java.lang.Comparable

像这样。

interface hasDateAndData implements Comparable<hasDateAndData>{
    abstact public Date getDate();
    abstract public String getString();

    @Override
    public int compareTo(hasDateAndData otherDD){
         int compareValue = getDate().compareTo(otherDD.getDate());
         if (compareValue == 0) {
             //You need to define what order objects come in if there dates are equal
         } else {
             return compareValue;
         }
    }
}

然后,您可以将两个列表中的所有项目添加到此类型的新列表中,对此列表进行排序,并获取前三个值。

List<hasDateAndData> combinedList = new ArrayList<hasDateAndData>();
combinedList.addAll(firstList);
combinedList.addAll(secondList);
combinedList.sort();