2017-05-15 8 views
0

Java -7을 사용하고 있습니다. 나는 도움이 필요 해요, 내가 붙어있는 원인을 원해요. 항상 값을 추가하지만 결국에는 최신 값을 얻고 싶습니다. 15.리스트는 DonateTable 클래스를 처리합니다. .getTime()은 long (System.getCurrentMilliseconds)ArrayList 상위 15 개 항목

이 값을 사용하여 최신 상위 15 개를 얻으려고합니다. 따라서 상위 ms = 최신 값입니다. 그러나 idk 어떻게. 이것은 내 코드

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; 
     } 
    } 

답변

0

당신은 DonateTable 클래스의 비교기를 사용하고 그것의 인스턴스를 정렬 할 getTime() 값을 사용할 수 있습니다.

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

을 그리고 마지막에 당신은 정렬 된 목록의 첫 번째 15 개 요소의 하위 목록보기를 얻을 수 있습니다 :

public class DonateTableByHighestTimeComparator implements Comparator<DonateTable>{ 

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

이 방법이 비교를 사용할 수 있습니다

List<DonateTable> top15Elements = data.subList(0,15); 
+0

및 그것을 구현하는 방법, 혼란 스러워요. ur 클래스처럼 단순히 2 개의 요소에서 가져온 값을 비교하지만 모든 요소와 함께 작동하고 상위 15 개를 제공하는 방식은? ps에 대한 답변 tho – magneto30

+0

당신은 비교기와리스트를'Collections.sort (List 리스트, Comparator c)'정적 메소드에 제공합니다. – davidxxx

+0

Nop 게임에서 "게임"을하지 못했습니다. 나는 당신이 나를 보여 준 것처럼 이렇게했습니다. https://pastebin.com/Vpp0QbaX – magneto30