Java如何过滤流中的元素

使用 Stream.filter(Predicate) 方法遍历所有元素并通过 Predicate 参数过滤所有符合给定条件的元素。

www. On IT Road .com

Java Stream filter() 示例

使用 Lambda 表达式过滤流

在这个 Java 示例中,我们正在迭代一个数字流。
我们从流中过滤所有偶数并将它们打印到控制台。

import java.util.Arrays;
import java.util.List;
public class Main 
{
	public static void main(String[] args) 
	{
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		list.stream()
			.filter(n -> n % 2 == 0)
			.forEach(System.out::println);
	}
}

使用 Predicate 过滤流

迭代整数流并仅打印偶数的示例。
此示例使用 Predicate 类代替 lambda 表达式,尽管两者是相同的。

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class Main 
{
	public static void main(String[] args) 
	{
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

		Predicate<Integer> condition = new Predicate<Integer>() 
		{
			@Override
			public boolean test(Integer n) {
				if (n % 2 == 0) {
					return true;
				}
				return false;
			}
		};
		list.stream().filter(condition).forEach(System.out::println);
	}
}

Java 过滤流并收集到列表中

我们可以使用 collect(Collectors.toList()) 方法将过滤后的元素流收集到一个 List中。

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main 
{
	public static void main(String[] args) 
	{
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		List<Integer> evenNumbers = list.stream()
					.filter(n -> n % 2 == 0)
					.collect(Collectors.toList());

		System.out.println(evenNumbers);
	}
}

Java Stream filter() 和 map()一起使用 示例

我们可以使用 map() 方法收集流元素,然后将每个数字转换为其平方,然后再将其收集到List

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main 
{
	public static void main(String[] args) 
	{
		List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
		List<Integer> evenNumbers = list.stream()
					.filter(n -> n % 2 == 0)
					.map(n -> n * n)
					.collect(Collectors.toList());

		System.out.println(evenNumbers);
	}
}

Stream.filter()方法

stream.filter()方法语法如下:

Stream<T> filter(Predicate<? super T> condition)

Predicate是一个函数性接口,表示从流中过滤掉不匹配元素的条件。

  • filter()是一个中间的 Stream操作。
  • 它返回一个Stream,由与给定谓词匹配的给定流的元素组成。
  • filter()参数应该是无状态谓词,它应用于流中的每个元素以确定是否应该包含它。
  • Predicate是一个函数式接口。

所以,我们也可以传递 lambda 表达式。

  • 它返回一个新的 Stream,因此我们可以使用适用于任何流的其他操作。
日期:2020-09-17 00:10:03 来源:oir作者:oir