2016-09-02 4 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

java 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

関連する問題