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

Map(マップ)のnullの値(value)を持つ要素を全削除する方法は、4つあります。
removeAll()
1つ目は、removeAll()を使う方法です。
まず、Mapからvalues()、values()からremoveAll()を呼び出します。
removeAll()の引数にCollections.singleton()を指定します。
そして、Collections.singleton()の引数にnullを指定します。
map.values().removeAll(Collections.singleton(null));
上記のremoveAll()は、values()を呼び出したMapのnullの値を持つ要素を全削除します。
使用例
import java.util.*;
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.values().removeAll(Collections.singleton(null));
System.out.println(numbers);
}
}
出力:
{four=4, one=1, two=2}
remove()
2つ目は、remove()を使う方法です。
まず、while()を記述します。
while()の()内で、Mapからvalues()、values()からremove()を呼び出します。
そして、remove()の引数にnullを指定します。
while(map.values().remove(null));
上記のwhile()は、values()を呼び出したMapのnullの値を持つ要素を全削除します。
使用例
import java.util.*;
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);
while(numbers.values().remove(null));
System.out.println(numbers);
}
}
出力:
{four=4, one=1, two=2}
removeIf()
3つ目は、removeIf()を使う方法です。
まず、Mapからvalues()を呼び出します。
values()からremoveIf()を呼び出します。
そして、removeIf()の引数に「Objects::isNull
」を指定します。
map.values().removeIf(Objects::isNull);
上記のremoveIf()は、values()を呼び出したMapのnullの値を持つ要素を全削除します。
使用例
import java.util.*;
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.values().removeIf(Objects::isNull);
System.out.println(numbers);
}
}
出力:
{four=4, one=1, two=2}
steram()
4つ目は、stream()を使う方法です。
まず、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}
まとめ
Map(マップ)のnullの値を持つ要素を全削除する方法は、次の4つです。
- removeAll()を使う方法
map.values().removeAll(Collections.singleton(null));
- remove()を使う方法
while(map.values().remove(null));
- removeIf()を使う方法
map.values().removeIf(Objects::isNull);
- stream()を使う方法
Map<TKey, TValue> result = map.entrySet().stream().filter(entry -> entry.getValue() != null).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
コメント