4
5

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 5 years have passed since last update.

List<Map<String,Object>>形式の一覧結果をフィルタリングする

Posted at

いまさらな感じですが…

業務システムにありがちですが、何かのデータを検索した結果(一覧検索結果)をjava.util.Listなどで持ちます。

このlistには、1件のデータをMapで保持しているとして、さらにコードでフィルタしたい場合を考えます。
検索済みの結果を、再検索することなく表示を切りかえる場合などを想定しています。

以前まではforループ書いて頑張ってました

Java7以前では、forループでListの中身を取り出し、Mapに対して処理を記載し、新しいListに詰め直す処理を書いていました。

せっかく今はStream API使えますので、今回はこの処理に使ってみましょう。

SampleFilter.java(抜粋)
public void execute() {
	// JSONで読み取った値をList<Map<String,Object>>に格納したとする
	List<Map<String,Object>> loadData = JSON.decode(jsonData);

	// 
	List<Map<String,Object>> filtered = 
		loadData.stream().filter(
			target -> test(target)
		).collect(
			Collectors.toList()
		);
	log.debug("filtered : {}" , filtered);
}

public static boolean test(Map<String, Object> target) {
	// 引数のMapに対し、何らかの判定処理をここで実装して true/false を返す。
	// trueなら次の条件を続けて実施。
	return true;
}

すごく簡素で、修正・拡張する場所もわかりやすいですね d(・ω・)

4
5
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
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?