0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Javaでリストをソートをする方法【Comparator】

Posted at

目的

Javaのリストをソートしたい。

※データベースからとってくる結果であれば、order byでソートが普通。
画面の項目をソートなど、やむを得ずにJava側でソートしたいときをイメージ。

やりたいこと

配列なりエンティティクラスといった複雑なオブジェクトのリストをソートしたい。
筆者はエンティティクラスをあれこれする機会が多いため、それを例に説明。

イメージ

①画面

例えば、祝日を入力するこんな画面があったとする。
イメージ.png

「この日は例外的に仕事あるから休みじゃない」
「逆にこの日はモンハン休みだから休みにする」
みたいな感じで独自の祝日を追加したり減らしたあとに
ソートボタンで、ソートできるようにしたい。

②祝日エンティティクラス

public class Holiday {
	// 祝日の日付
	private String holidayDate;
	// 祝日の名前
	private String holidayName;
	
	public setHolidayDate(String holidayDate){
		this.holidayDate = holidayDate;
	}

	public setHolidayName(String holidayName){
		this.holidayName = holiName;
	}

	public String getHolidayDate(){
		return this.holidayDate;
	}
	
	public String getHolidayName(){
		return this.HolidayName;
	}
}

③祝日フォームクラス

public class SortForm {
    //  エンティティクラスのリスト
    private List<Holiday> holiday = null;
	
	public setHoliday(List<Holiday> holiday){
		this.holiday = holiday;
	}
	
	public String getHoliday(){
		return this.holiday;
	}
}

結論

Comparatorのメソッドを作ってあげればよし。

処理クラス

/**
 * ソートボタンを押したときの記述をSpringっぽくしてみた
 * @param   form ソートする画面のフォームクラス
 * @return  遷移先   
 **/
@RequestMapping(value = "sortTabel")
private String sortTabel(SortForm form) {

	List<Holiday> holidayList = form.getHoliday();
	
	// ソートする
    Collections.sort(holidayList, new HolidayListComparator());

	// 画面に移動
    return "jsp/hoge/hoge.jsp";
}

/**
 * 任意のソートキーを設定
 * @return  比較結果
 **/
public class HolidayListComparator implements Comparator<Holiday> {

	@Override
	public int HolidayComparator(Holiday h1, Holiday h2) {
		return h1.holidayDate < h2.holidayDate ? -1 : 1;
	}
}

結果
イメージ2.png

あとがき

基本的には、参考記事にあるArrayListのソートと同じことをしている。
テスト画面をサクッと作る必要があって、インナークラスを使いつつ実装。
コーディングのきれいさとやらはガン無視。

3年目くらいのときにふとつまづいたのを思い出したので、コピペと言われればそれまでだが、フェイクを混ぜつつ備忘録として。

参考記事

「ArrayList 要素のソートと Comparator」
https://java.keicode.com/lib/collections-sort.php

「【Java】getter・setterのメモ」
https://qiita.com/takahirocook/items/27828bc8477735612021

「内部クラスの使いどころ」
http://blogs.wankuma.com/nagise/archive/2007/08/01/88273.aspx

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?