HOWTO · Java

Java의 필터 목록

이 자습서는 Java에서 목록을 필터링하는 방법을 보여줍니다.

목록 필터링은 Java에서 작업하는 동안 자주 필요합니다. Java에서 목록을 필터링하는 여러 방법은 핵심 Java 및 다른 라이브러리를 사용합니다.

이 자습서는 Java에서 목록을 필터링하는 방법을 보여줍니다.

Java 7 이상을 사용하여 목록 필터링

Java 7 및 이전 버전을 사용하여 목록을 반복하여 Java에서 목록을 필터링할 수 있습니다.

for 루프 사용

한 가지 방법은 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);
  }
}

위의 코드는 forif를 사용하여 주어진 목록에서 문자 J로 이름을 필터링합니다. 출력 참조:

[Jack, Jhon, Joey]

remove() 메서드 사용

또 다른 방법은 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에서 목록을 필터링하는 데 사용할 수 있는 IterableFluentIterable이 포함되어 있습니다. 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]