2016-09-02 3 views
0

나는 이것을하려고한다 : 오늘 날짜, 이번 주, 이번 달 그리고 올해까지 객체 값 배열 (날짜 유형)을 정렬하고 Comparator 클래스를 사용하여 내림차순 또는 오름차순으로 날짜 배열을 정렬하는 방법을 알고있다. 오늘 날짜, 이번 주, 이번 달 또는 올해까지 말한 것처럼 배열을 정렬하는 방법을 모르겠습니다.사진 목록을 필터링하는 방법 - android?

private void sortTopicsByDate() { 
    Collections.sort(topics, new Comparator<Topic>() { 
     @Override 
     public int compare(Topic o1, Topic o2) { 
      return o1.getCreatedTime().compareTo(o2.getCreatedTime()); 
     } 
    }); 
} 

UPDATE (오늘 만든 사진과 함께 필터링 목록)

private List<Topic> getFilteredTopics() { 
    List<Topic> filteredList = new ArrayList<>(); 
    Date now = new Date(); // today date 
    Calendar cal = Calendar.getInstance(); 
    Calendar getCal = Calendar.getInstance(); 
    cal.setTime(now); 
    int nYear = cal.get(Calendar.YEAR); 
    int nMonth = cal.get(Calendar.MONTH); 
    int nDay = cal.get(Calendar.DAY_OF_MONTH); 

    if (topics != null) { 
     for (Topic topic : topics) { 
      getCal.setTime(topic.getCreatedTime()); 
      int year = getCal.get(Calendar.YEAR); 
      int month = getCal.get(Calendar.MONTH); 
      int day = getCal.get(Calendar.DAY_OF_MONTH); 
      if (nDay == day && month == nMonth) { 
       filteredList.add(topic); 
      } 
     } 
    } 
    return filteredList; 
} 
+0

"this"란 무엇인가요? – shmosel

+1

당신이 지금까지 시도한 것을 보여주십시오 –

+1

"오늘 날짜, 이번 주, 이번 달 또는 올해의 정렬"이란 무엇을 의미합니까? 질문에 구체적인 예를 들어 주시겠습니까? –

답변

2

자바 8을 사용하면 streaming-api을 사용하여 주제별로 필터링 할 수 있습니다. filter의 조건을 수정해야 할 경우이 솔루션에는 에 startfinish이 포함되어 있지 않습니다.

Collection<Topic> topics = ...; 
Date start = ...; 
Date finish = ...; 
List<Topic> filteredTopics = topics.stream() 
    .filter(t -> t.getCreatedTime().after(start) && t.getCreatedTime().before(finish)) 
    .collect(Collectors.toList()); 
+1

왜't.getCreatedTime.after (시작) && t.getCreatedTime.before (완료)'? – bradimus

+1

@bradimus 귀하의 제안은 분명히 훨씬 더 :-) 내 대답을 수정했습니다 – garnulf

+0

그리고 어떻게 내가 컬렉션을 초기화해야합니까? –

-2

Date 먼저 즉 해 (자연적으로 상승하는 날짜 순서로, 이미 Comparable 인터페이스를 구현하고, 다음 달, 다음 일). 당신이처럼 소리 후 그 방금 역 비교를 사용할 수있는 경우라면 반대 순서 (즉 오늘, 다음 어제, 다음 지난 주 등) :

Comparator<Date> reverseComparator = new Comparator<Date>(){ 
    @Override public int compare(Date d1, Date d2){ 
     //dealing with nulls ignored for purposes of explanation 
     return -1*d1.compareTo(d2); 
    } 
} 

이해야 종류의 최근 날짜 첫 번째.

+0

또 다른 방법은'Collections.reverseOrder()' –

+0

@JohnLeehey를 사용하는 것입니다. 일반적으로이 방법을 사용하는 것이 더 좋습니다 :) 나는이 방법을 더 시범 적으로 생각했기 때문에이 경우를 선택하지 않았습니다. –

+1

OP는 * "내림차순 또는 오름차순으로 날짜 배열을 정렬하는 방법을 알고 있습니다"*, 그래서 내림차순의 예 (나쁜!)로 왜 응답하고 있습니까? 나쁘다는 것은'compareTo()'가'Integer.MIN_VALUE'을 반환하면 코드가 실패한다는 뜻입니다. 순서를 바꾸려면'return d2.compareTo (d1);와 같이'd1'과'd2'를 뒤집으십시오. 어쨌든, 당신은 질문에 대답하지 않습니다, 그래서 : * -1 (유용하지 않음) *. – Andreas

관련 문제