どうも、ちょげ(@chogetarou)です。
stream()を使ってMap(マップ)のnullの値(value)を持つ要素を全削除する方法を紹介します。
方法

stream()を使ってMap(マップ)のnullの値(value)を持つ要素を全削除するには、filter()を使います。
まず、Collectorsをインポートします。
import java.util.stream.Collectors;
次に、MapからentrySet()、entrySet()からstream()を呼び出します。
stream()からfilter()を呼び出します。
filter()の引数に、1つの引数を持つラムダ式を指定します。
ラムダ式で、引数のgetValue()がnull以外という条件式を指定します。
そして、filter()からcollect()を呼び出します。
collect()の引数に、Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)
を指定します。
Map<TKey, TValue> result = map.entrySet()
.stream()
.filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
上記のcollect()は、entrySet()を呼び出したMapのnullの値を持つ要素を全削除します。
使用例
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws Exception {
Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", null);
numbers.put("four", 4);
numbers.put("five", null);
numbers = numbers.entrySet()
.stream()
.filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
System.out.println(numbers);
}
}
出力:
{four=4, one=1, two=2}
コメント