HOWTO · Java

Java のフィルタ リスト

このチュートリアルでは、Java でリストをフィルタリングする方法を示します。

このページの内容

Java での作業中は、リストのフィルタリングが必要になることがよくあります。 Java でリストをフィルタリングするいくつかの方法では、コア Java とさまざまなライブラリを使用します。

このチュートリアルでは、Java でリストをフィルタリングする方法を示します。

Java 7 以降を使用してリストをフィルタリングする

Java 7 およびそれ以前のバージョンを使用してリストを反復処理し、Java でリストをフィルタリングできます。

for ループを使用する

1つの方法は、for ループと条件ステートメントを使用することです。 例を見てみましょう:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List = Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey");

    // Using Java 7 and before:

    // empty list
    List<String> Filtered_List = new ArrayList<>();

    // iterate through the list
    for (String Demo_Entry : Demo_List) {
      // filter values that start with `B`
      if (Demo_Entry.startsWith("J")) {
        Filtered_List.add(Demo_Entry);
      }
    }

    System.out.println(Filtered_List);
  }
}

上記のコードは、for と if を使用して、与えられたリストから文字 J で名前をフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]

remove() メソッドを使用する

もう 1つの方法は、Iterator クラスの remove() メソッドを使用してリストをフィルタリングすることです。 例を見てみましょう:

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 7 and before:

    // get an iterator to the list
    Iterator<String> Demo_Iterator = Demo_List.iterator();

    // iterate through the list
    while (Demo_Iterator.hasNext()) {
      String Demo = Demo_Iterator.next();

      // filter values that start with `B`
      if (!Demo.startsWith("J")) {
        Demo_Iterator.remove();
      }
    }

    System.out.println(Demo_List);
  }
}

このコードは、remove() メソッドと while ループで Iterator を使用して、指定されたリストから文字 J を含む名前をフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]

Java 8 を使用してリストをフィルタリングする

Java 8 でリストをフィルタリングするには、リストをストリームに変換してからフィルタリングする方法を使用できます。 これは、Java 8 でリストをフィルタリングするための推奨される方法です。

例を参照してください。

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 8 and above:
    String Filtered_List = Demo_List.stream()
                               .filter(entry -> entry.startsWith("J"))
                               .collect(Collectors.joining(", ", "[", "]"));

    System.out.println(Filtered_List);
  }
}

上記のコードは、stream() を使用して、文字 J を含む名前のリストをフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]

ご覧のとおり、上記のコードは出力でリストを文字列に変換します。 Stream を使用して、出力をリストに変換することもできます。

例を参照してください。

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    // Using Java 8 and above:
    List<String> Filtered_List =
        Demo_List.stream().filter(entry -> entry.startsWith("J")).collect(Collectors.toList());

    System.out.println(Filtered_List);
  }
}

上記のコードは、フィルタリングされたリスト出力をリストに変換します。 出力を参照してください:

[Jack, Jhon, Joey]

Google Guava を使用してリストをフィルタリングする

Guava ライブラリには、Java でリストをフィルタリングするために使用できる Iterable と FluentIterable が含まれています。 Iterable クラスには、リストをフィルタリングする filter() メソッドが含まれています。

Guava ライブラリは、次の依存関係を Maven プロジェクトに追加することで使用できます。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>19.0</version>
</dependency>

それでは、Google Guava ライブラリの Iterable を使用して例を試してみましょう。

package delftstack;

import com.google.common.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    Iterable<String> Filtered_Iterable =
        Iterables.filter(Demo_List, new com.google.common.base.Predicate<String>() {
          @Override
          public boolean apply(String s) {
            return s.startsWith("J");
          }
        });

    List<String> Filtered_List = Lists.newArrayList(Filtered_Iterable);

    System.out.println(Filtered_List);
  }
}

このコードは、J という文字で始まる名前で指定されたリストをフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]

FluentIterable を使った例を試してみましょう:

package delftstack;

import com.google.common.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    List<String> Filtered_List = FluentIterable.from(Demo_List)
                                     .filter(new com.google.common.base.Predicate<String>() {
                                       @Override
                                       public boolean apply(String s) {
                                         return s.startsWith("J");
                                       }
                                     })
                                     .toList();

    System.out.println(Filtered_List);
  }
}

上記のコードは、Google Guava ライブラリの FluentIterable を使用して、文字 J で始まるリストから名前をフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]

Apache Commons を使用してリストをフィルタリングする

Apache Commons は、リストをフィルタリングするために使用できるクラス CollectionUtils を提供します。 Apache Commons を使用するには、次の依存関係を Maven プロジェクトに追加します。

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

それでは、CollectionUtils を使用してリストをフィルタリングする例を試してみましょう。

package delftstack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.collections.CollectionUtils;

public class Example {
  public static void main(String[] args) {
    List<String> Demo_List =
        new ArrayList<>(Arrays.asList("Jack", "Shawn", "Jhon", "Michelle", "Joey"));

    List<String> Filtered_List = new ArrayList<>(Demo_List);
    CollectionUtils.filter(Filtered_List, new Predicate<String>() {
      @Override
      public boolean evaluate(String s) {
        return s.startsWith("J");
      }
    });

    System.out.println(Filtered_List);
  }
}

上記のコードは、CollectionUtils メソッドを使用して、文字 J で始まる名前のリストをフィルタリングします。 出力を参照してください:

[Jack, Jhon, Joey]