迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

Java 中的过滤器列表

作者:迹忆客 最近更新:2023/07/22 浏览次数:

在 Java 中工作时经常需要过滤列表。 在 Java 中过滤列表的多种方法使用核心 Java 和不同的库。

本文介绍如何在 Java 中过滤列表。


使用 Java 7 及更高版本过滤列表

我们可以使用 Java 7 和之前的版本迭代列表,以过滤 Java 中的列表。

使用 for 循环

一种方法是使用 for 循环和条件语句。 让我们看一下例子:

package jiyik;

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()方法

另一种方法是使用 Iterator 类中的 remove() 方法来过滤列表。 让我们看一下例子:

package jiyik;

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() 方法的Iterator 和while 循环来过滤给定列表中带有字母J 的名称。 查看输出:

[Jack, Jhon, Joey]

使用 Java 8 过滤列表

要在 Java 8 中过滤列表,我们可以使用将列表转换为流然后对其进行过滤的方法。 这是在 Java 8 中过滤列表的推荐方法。

参见示例:

package jiyik;

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

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 库包含 Iterable 和 FluentIterable,可用于过滤 Java 中的列表。 Iterable 类包含 filter() 方法,用于过滤列表。

可以通过将以下依赖项添加到 Maven 项目来使用 Guava 库:

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

现在让我们尝试使用 Google Guava 库中的 Iterable 的示例:

package jiyik;

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

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

import org.apache.commons.collections.CollectionUtils;
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 = 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]

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Merge PDF in Java

发布时间:2023/07/21 浏览次数:157 分类:Java

This tutorial will discuss merging PDF in Java.

Define a Static Method in Java Interface

发布时间:2023/07/21 浏览次数:187 分类:Java

This tutorial demonstrates how to define static methods in a Java interface, what are rules for that and why we can't override these static methods.

Limit Java SSL Debug Logging

发布时间:2023/07/21 浏览次数:184 分类:Java

Today, we will learn about Java SSL debug, its importance, various utilities and how to use one or multiple in a single command.

Introduction to Integration Testing in Java

发布时间:2023/07/21 浏览次数:103 分类:Java

This tutorial revolves around integration testing, its different types, and guides about the required steps of integration testing taking a real-world scenario.

Capture and Analyze Java Heap Dump

发布时间:2023/07/21 浏览次数:68 分类:Java

This tutorial educates about Java heap dump, its various formats and methods to capture. Further, we will learn what tool is used to analyze heap dump that we generated.

Java Inline Function

发布时间:2023/07/21 浏览次数:135 分类:Java

This tutorial demonstrates how to implement an inline function in Java.

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便