【Java備忘録】Java8 StreamをつかったListのフィルタリング

テストデータを作って、フィルタリングしたい値のリスト(String想定)でフィルタリングする例です。

リスト.stream().filter(リストの個別の中身 -> フィルタ条件(true/falseを返却する※1)).collect(結果を集めて変換※2)

※1 ここでは無名関数を作り判定している。
※2 filterした結果をリストにして戻している。

 
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import java.util.stream.Collectors;

class filterTest {
    public static void main(String args[]) {
        
        //値のセット
        List<Map<String, Object>> mapList = setTestData();
        //フィルタリングする値
        String[] filterList = new String[] {"B2", "C3", "F6"};

        System.out.println("フィルタリング前の出力 -----");
        //フィルタリング前の出力
        mapList.stream().forEach(lst -> System.out.println("key:" + lst.get("key") + ",value1=" + lst.get("value1") + ",value2=" + lst.get("value2")));
        
        System.out.println("フィルタリング後の出力 -----");
        //フィルタリング処理
        mapList = mapList.stream().filter(
            lst -> {
                for(String filt : filterList) {
                    if(filt.equals(String.valueOf(lst.get("value1")))) return false;
                }
                return true;
            }).collect(Collectors.toList());
        //フィルタリング結果の出力
        mapList.stream().forEach(lst -> System.out.println("key:" + lst.get("key") + ",value1=" + lst.get("value1") + ",value2=" + lst.get("value2")));
    }

    /**
     * テストデータの設定
     * @return テストデータリスト
     */
    public static List<Map<String, Object>> setTestData() {

        //オブジェクトの初期化
        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        Map<String, Object> map = null;
        
        //10件分のテストデータを作成する
        for(int i = 0; i < 10; i++) {
            map = new HashMap<String, Object>();
            //キー名(String)、キー値(String)
            map.put("key", String.valueOf(i + 1));
            //属性名(String)、属性値(String)
            map.put("value1", (new String(Character.toChars(65+i)).concat(String.valueOf(i+1))) );
            //属性名(String)、属性値(Integer)
            map.put("value2", Integer.valueOf(i + 100));
            mapList.add(map);
        }
        return mapList;
    }
}

 

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