[Java]Map(マップ)のnullの値を全削除するには?

Java

どうも、ちょげ(@chogetarou)です。

Map(マップ)のnullの値(value)を持つ要素を全削除する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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));

コメント

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