0

我正在使用 Java -7。我需要一些帮助,因为我卡住了,我有一个列表,我一直在添加值,但最后我想获得最新的 15。列表处理包含 .getTime() 的 DonateTable 类,它返回 long (System.getCurrentMilliseconds)

我想用这个值来获得最新的前 15 名。所以更高的 ms = 最新值。但是我知道怎么做。这是我的代码

public ArrayList<DonateTable> getLog(int objectId)
{
    ArrayList<DonateTable> data = new ArrayList<>();

    for (DonateTable dt : list)
        if (dt.getObjectId() == objectId)
            data.add(dt);

    return data;
}

public static class DonateTable
    {
        int _objectId = 0;
        String _service = "";
        long _time, _points = 0;

        public DonateTable(int ObjectId, String service, long time, long points)
        {
            _objectId = ObjectId;
            _service = service;
            _time = time;
            _points = points;
        }

        public int getObjectId()
        {
            return _objectId;
        }

        public String getService()
        {
            return _service;
        }

        public long getTime()
        {
            return _time;
        }

        public long getPoints()
        {
            return _points;
        }
    }
4

1 回答 1

0

您可以将 Comparator 用于DonateTable类并使用该getTime()值对其实例进行排序。

public class DonateTableByHighestTimeComparator implements Comparator<DonateTable>{

      public int compare(DonateTable o1, DonateTable o2){
         return - Long.compare(o1.getTime(), o2.getTime());
      }
    }

您可以通过这种方式使用此比较器:

List<DonateTable> data = new ArrayList<>();
...
Collections.sort(data, new DonateTableByHighestTimeComparator());

最后,您可以获得排序列表的前 15 个元素的子列表视图:

List<DonateTable> top15Elements = data.subList(0,15);
于 2017-05-15T09:44:32.993 回答