いまさらな感じですが…
業務システムにありがちですが、何かのデータを検索した結果(一覧検索結果)を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(・ω・)