2017-12-12 17 views
0

私のオブジェクトのリストを日付フィールドで並べ替え、コンパイラ、ラムダ、ロングなどを試すために、たくさんの(実際には多くの)コードを試してきました。 ..Javaの日付フィールドでオブジェクトのリストをソート

私は何もしていません、私のリストはちょうど注文していないと私は本当に何をすべきか分からない、私はここで何度も検索し、見つけたものすべてを試しました。

投稿のリストがあり、という名前のjava.util.Dateフィールドがに作成されています。これらの投稿はcategoryというエンティティと多対多の関係になっています。

まず私は、カテゴリを作成しました:

Category cat = catCtrl.get(5); 

その後、私は記事のリストを取得:リストアウト

List<Post> list = cat.getPostList(); 

印刷:(ID +作成+タイトル)

45 Sat Nov 25 03:36:06 MST 2017 Donec a libero lacinia
46 Mon Nov 27 02:46:37 MST 2017 Etiam at bibendum mauris
47 Sat Nov 25 03:39:17 MST 2017 Cras vel orci nunc
50 Sat Nov 25 03:37:29 MST 2017 dasdasf

これで、最近のものから古いものまで、作成日順にリストを取得することが考えられます:

46 Mon Nov 27 02:46:37 MST 2017 Etiam at bibendum mauris
47 Sat Nov 25 03:39:17 MST 2017 Cras vel orci nunc
50 Sat Nov 25 03:37:29 MST 2017 dasdasf
45 Sat Nov 25 03:36:06 MST 2017 Donec a libero lacinia

公式ドキュメントによると、これはそれを行う必要があります。

Collections.sort(list, new Comparator<Post>() { 
    public int compare(Post p1, Post p2) { 
     return p1.getCreated().compareTo(p2.getCreated()); 
    } 
}); 

そのコードはまったく順序を変更しませんが。

何が欠けていますか?

+2

他の人があなたのコードを実行して問題が何であるかを確認できるように、十分なコードを投稿してください。それはこの質問がより迅速に答えるのを助けるでしょう。 – Keara

+1

これらの投稿をデータベースから取得していますか?おそらくあなたは 'ORDER BY'節を介してデータベース内で注文を行うべきです。また、日付は標準形式ではないようです。日付をテキストとして保存していますか? –

+0

datetime列はNULL可能ですか?あなたはNPEを手に入れていますか? –

答えて

0

@ Poxxac

以下のコードを使用してください。

package com.java; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

import com.google.common.collect.Multimap; 
import com.google.common.collect.MultimapBuilder; 

public class Test { 

    public static void main(String[] args) { 

     DateFormat df = new SimpleDateFormat("yyyyMMdd"); 

     Example example1 = new Example(); 
     example1.setDate(new Date()); 
     example1.setName("Name1"); 

     Example example2 = new Example(); 
     example2.setDate(new Date(System.currentTimeMillis()-48*60*60*1000)); 
     example2.setName("Name2"); 

     Example example3 = new Example(); 
     example3.setDate(new Date(System.currentTimeMillis()-24*60*60*1000)); 
     example3.setName("Name3"); 

     Multimap<String, Example> multimap = MultimapBuilder.treeKeys().linkedListValues().build(); 
     multimap.put(df.format(example1.getDate()), example1); 
     multimap.put(df.format(example2.getDate()), example2); 
     multimap.put(df.format(example3.getDate()), example3); 


     System.out.println(multimap); 

    } 
} 

class Example { 

    private String name; 

    private Date date; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public Date getDate() { 
     return date; 
    } 

    public void setDate(Date date) { 
     this.date = date; 
    } 

    @Override 
    public String toString() { 
     return "Example [name=" + name + ", date=" + date + "]"; 
    } 

} 
+0

これがどのように役立つのか分かりませんか?キーが文字列値であるソートされたマルチマップを作成しています。そしていま? – AKSW

+0

@AKSWマルチマップコードは、データを入力すると自動的にキーに基づいてソートされます。出力を実行して確認します。 – Kumar

+1

これは事を過度に複製しています。私たちは働くためにリストの並べ替えが必要です。 –

0

テスト機能:

public void test() 
{ 
    Date date1 = DateUtils.convertToDate("2017-11-20"); 
    Date date2 = DateUtils.convertToDate("2017-11-21"); 
    Date date3 = DateUtils.convertToDate("2017-11-22"); 

    Demo demo1 = new Demo(1, date1); 
    Demo demo2 = new Demo(2, date2); 
    Demo demo3 = new Demo(3, date3); 
    List<Demo> demos = new ArrayList<Demo>(); 
    demos.add(demo1); 
    demos.add(demo2); 
    demos.add(demo3); 

    for(Demo item : demos){ 
     System.out.println(item.toString()); 
    } 

    Collections.sort(demos, new Comparator<Demo>(){ 
     public int compare(Demo o1, Demo o2){ 
      return o2.create.compareTo(o1.create); 
     } 
    }); 
    System.out.println("========== ordered ============="); 
    for(Demo item : demos){ 
     System.out.println(item.toString()); 
    } 
} 

、出力は:

1-Mon Nov 20 00:00:00 GMT+08:00 2017 
2-Tue Nov 21 00:00:00 GMT+08:00 2017 
3-Wed Nov 22 00:00:00 GMT+08:00 2017 
========== ordered ============= 
3-Wed Nov 22 00:00:00 GMT+08:00 2017 
2-Tue Nov 21 00:00:00 GMT+08:00 2017 
1-Mon Nov 20 00:00:00 GMT+08:00 2017 

あなたが物語これらdatasにクラスjava.util.LinkedListを使用することができる別の質問があります。

:クラスDateUtilsは私自身の定義です。

関連する問題