Java 中的过滤器列表
在 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]
相关文章
Serialize Object to JSON in Java
发布时间:2023/07/21 浏览次数:195 分类:Java
-
This tutorial demonstrates how to serialize an object to JSON in Java.
Pretty-Print JSON Data in Java
发布时间:2023/07/21 浏览次数:115 分类:Java
-
This tutorial will discuss the JSON Pretty-Print 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.
Java Disable SSL Validation
发布时间:2023/07/21 浏览次数:101 分类:Java
-
This tutorial demonstrates how to disable SSL validation in Java.
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.