Javaのリストからnull、空、および空白の値をフィルタリングします
この投稿では、Javaのリストからnull、空、および空白の値をフィルタリングする方法について説明します。
1.プレーンJavaの使用
プレーンJavaでは、Stream APIを使用して、リストからnull、空、および空白の値をフィルタリングできます。
Stream APIは、 filter()
指定された述語に一致する要素を保持するメソッド。 null、空、および空白の値をリストから削除するには、逆述語を使用できます Predicate.not()
Java11およびJava11より前のラムダ式を開始します。
次のプログラムは、動作を示しています filter()
null、空、および空白の値を削除するメソッド。ソリューションは元のリストのコピーを作成することに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.function.Predicate; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> input = Arrays.asList("A", "B", null, "", "C", "D", null, "", "E", " "); //nullのみを削除します List<String> filtered = input.stream() .filter(Objects::nonNull) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, , C, D, , E, ] // null値と空の値を削除します(Java 11より前) filtered = input.stream() .filter(s -> s != null && !s.isEmpty()) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E, ] // null値と空の値を削除します(Java 11以降) filtered = input.stream() .filter(Objects::nonNull) .filter(Predicate.not(String::isEmpty)) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E, ] // null、空、および空白の値を削除します(Java 11より前) filtered = input.stream() .filter(s -> s != null && !s.isBlank()) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E] // null、空、および空白の値を削除します(Java 11以降) filtered = input.stream() .filter(Objects::nonNull) .filter(Predicate.not(String::isBlank)) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E] } } |
2. ApacheCommonsLangの使用
プロジェクトでApacheCommonsLangを使用している場合は、次を使用できます。 isNotEmpty()
また isNotBlank()
からの方法 StringUtils
nullセーフなクラス。次のプログラムは、これらのメソッドの動作を示しています。ソリューションは元のリストのコピーを作成することに注意してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
import org.apache.commons.lang3.StringUtils; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<String> input = Arrays.asList("A", "B", null, "", "C", "D", null, "", "E", " "); //null値と空の値を削除します List<String> filtered = input.stream() .filter(StringUtils::isNotEmpty) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E, ] // null、空、および空白の値を削除します filtered = input.stream() .filter(StringUtils::isNotBlank) .collect(Collectors.toList()); System.out.println(filtered); // [A, B, C, D, E] } } |
出力:
[A, B, C, D, E, ]
[A, B, C, D, E]
3.使用する removeIf()
方法
上記の両方のソリューションは、元のリストを変更しませんが、元のリストのコピーを作成します。リストをインプレースで変更する場合は、 removeIf()
方法。 The removeIf()
メソッドは、指定された述語を満たすすべての要素を削除します。これを以下に示します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; public class Main { public static void main(String[] args) { List<String> input = new ArrayList<>(Arrays.asList("A", "B", null, "", "C", "D", null, "", "E", " ")); //null値を削除します input.removeIf(Objects::isNull); System.out.println(input); // [A, B, , C, D, , E, ] //空の値を削除します input.removeIf(String::isEmpty); System.out.println(input); // [A, B, C, D, E, ] //空白の値を削除します input.removeIf(String::isBlank); System.out.println(input); // [A, B, C, D, E] } } |
出力:
[A, B, , C, D, , E, ]
[A, B, C, D, E, ]
[A, B, C, D, E]
これで、Javaのリストからnull、空、および空白の値をフィルタリングすることができます。