Androidアプリ開発

DTOクラスのArrayListをソートする

この記事は約10分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事はAndroidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Javaの開発経験、XML構文規則、Androidのアプリ開発経験がある方を対象としています。
Androidのアプリ開発でお役にたててれば、嬉しいです。
(これからAndroidのアプリ開発やJavaでの開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


DTO(データの受け渡し用)クラスのArrayListをソートする

ポイント

DTO(Data Transfer Object)とはアプリケーション間でデータを受け渡すためのオブジェクトです。
主にHTTPベースでデータを受け渡す際のJSONデータを展開・格納するクラスとして使用します。
今回は、ArrayListで複数管理する場合でクラスのメンバ変数でソートする方法を紹介します。

アプリからGoProの動画リストを取得する場合、JSONデータでレスポンスを受け取ります。
受信したJSONデータを使って、動画のファイル名や登録日時で一覧表示するケースで説明します。

Open GoPro HTTP API (2.0)

DTOクラス

Get Media Listコマンドのレスポンス(JSONデータ)を格納するDTOクラスを用意します。

public class Media {
    public String       id;
    public List<media>  media;
    public static class media {
        public String   d;
        public List<fs> fs;
    }
    public static class fs {
        public  String  n;      // Media filename
        public  String  cre;    // Creation time in seconds since epoch
        public  String  mod;    // Time file was last modified in seconds since epoch
        public  String  glrv;   // Low resolution video size
        public  String  ls;     // Low resolution file size
        public  String  s;      // Size of media in bytes
    }
}

階層構造をもつクラスでMediaクラスはディレクトリ(d)とファイル(fs)を管理します。
fsクラスはファイル名(n)、サイズ(s)、登録日時(cre)などを管理します。

JSONデータの展開と格納

JSONデータのDTOクラス(Media)への展開はObjectMapperを使用します。

    public final ObjectMapper   mapper = new ObjectMapper();
    public Media[]              media;
    :
    public void files(String tz, int slot, int start) {
        ExecutorService executorService = Executors.newSingleThreadExecutor();
        executorService.execute(() -> {
            MediaType type = MediaType.get("application/json; charset=utf-8");
            RequestBody body = RequestBody.create("", type);
            Request request = new Request.Builder()
                    .url("http://10.5.5.9/gp/gpMediaList")
                    .post(body)
                    .build();
            try (Response res = client.newCall(request).execute()) {
                if (!res.isSuccessful()) {
                    throw new IOException("Unexpected code " + res);
                }
                media[slot] = mapper.readValue(response[slot], Media.class);
            } catch (IOException e) {
                media[slot] = null;
            }
            :
        });
    }

DTOクラスのArrayListをソートする

ArrayListのソート同様にComparatorを使用します。
昇順と降順の切り替えはオーバライドするcompareの引数を入れ替えます。

ファイル名の降順でソート

ファイル名の降順でソートするクラス(FileComparator)を作成します。
ファイル名の降順でソートするのでcompareはfs2.nとfs1.nを比較した結果を返却します。
ArrayListを作成したFileComparatorを指定してソートします。

    public static class FileComparator implements Comparator<Media.fs> {
        @Override
        public int compare(Media.fs fs1, Media.fs fs2) {
           return fs2.n.compareTo(fs1.n);
        }
    }
  :

    List<Media.fs> files = new ArrayList<>();
    for (Media.media medias :  media[slot].media) {
         for (Media.fs file : medias.fs) {
             files.add(file);
         }
    }
    files.sort(new FileComparator());
    :

登録日時の降順でソート

登録日時の降順でソートするクラス(FileComparator)を作成します。
登録日時の降順でソートするのでcompareはfs2.creとfs1.creを比較した結果を返却します。
ArrayListを作成したFileComparatorを指定してソートします。

    public static class FileComparator implements Comparator<Media.fs> {
        @Override
        public int compare(Media.fs fs1, Media.fs fs2) {
            return Math.toIntExact(Long.parseLong(fs2.cre) - Long.parseLong(fs1.cre));
        }
    }
  :

    List<Media.fs> files = new ArrayList<>();
    for (Media.media medias :  media[slot].media) {
         for (Media.fs file : medias.fs) {
             files.add(file);
         }
    }
    files.sort(new FileComparator());
    :

今回は、ここまでです。

DTOクラスのArrayListをソートしているAndroidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、JavaやC#などのオブジェクト指向言語が初めての方は、Androidのアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
シェアする
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました