博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java stream过滤_Java Stream过滤器
阅读量:2535 次
发布时间:2019-05-11

本文共 3859 字,大约阅读时间需要 12 分钟。

java stream过滤

Java Stream filter can be very helpful when you want to do some processing only on some elements of the Stream based on certain condition.

当您希望仅基于特定条件对Stream的某些元素进行某些处理时,Java Stream过滤器可能会非常有用。

Java Stream过滤器 (Java Stream filter)

was introduced in Java 8. Java Stream filter is an intermediate operation, i.e. it returns a new Stream.

是Java 8中引入的。Java Stream过滤器是一个中间操作,即它返回一个新的Stream。

Java Stream过滤器示例 (Java Stream filter example)

Let’s look at a simple example to count the even numbers in a list of integers. We can do it like below.

让我们看一个简单的示例来计算整数列表中的偶数。 我们可以像下面这样。

List
intList = generateList(); //some method to create the list of integersint evenCount = 0;for(int i : intList){ if(i%2==0){ evenCount++; //code to do some processing }}System.out.println("Even Number Count: "+evenCount);

Now let’s see how we can do the same thing using java stream filter api.

现在,让我们看看如何使用java流过滤器api来做同样的事情。

Predicate
predicate = new Predicate
(){ @Override public boolean test(Integer i) { return (i%2==0); } };List
evenList = intList.parallelStream().filter(predicate).collect(Collectors.toList());evenCount = evenList.size();System.out.println("Even Number Count: "+evenCount);

Predicate is a functional interface that takes one argument and return boolean based on the test function. Above code can also be written as below using .

谓词是一个功能接口,它接受一个参数并根据测试函数返回布尔值。 上面的代码也可以使用如下编写。

evenCount = intList.parallelStream().filter(i -> {	return (i % 2 == 0);}).collect(Collectors.toList()).size();

Java流过滤器示例2 (Java Stream Filter Example 2)

Let’s look at another example where we want to filter a list of integers and keep only numbers greater than 90.

让我们看另一个示例,我们要过滤一个整数列表,并且仅保留大于90的数字。

List
intList = new ArrayList<>();for(int i=50; i<100; i++) intList.add(i);Stream
sequentialStream = myList.stream(); // we can create parallel stream tooStream
highNumsStream = sequentialStream.filter(p -> p > 90); //filter numbers greater than 90System.out.print("High Nums greater than 90=");highNumsStream.forEach(p -> System.out.print(p+" "));//prints "High Nums greater than 90=91 92 93 94 95 96 97 98 99 "

带对象的Java流过滤器示例 (Java Stream filter Example with Objects)

Let’s say we have list of employees and we want to print names of all employees with age greater than 32. Below is a simple program to do this using java stream filter.

假设我们有一个雇员列表,并且想打印所有年龄大于32岁的雇员的姓名。下面是一个使用Java流过滤器执行此操作的简单程序。

package com.journaldev.examples;import java.util.ArrayList;import java.util.List;public class StreamFilterExample {	public static void main(String[] args) {		List
empList = new ArrayList<>(); empList.add(new Employee("Pankaj", 35)); empList.add(new Employee("David", 25)); empList.add(new Employee("Lisa", 31)); empList.add(new Employee("Dean", 40)); // print all employees above 32 years of age empList.stream().filter(p -> (p.getAge() > 32)).forEach(p -> System.out.println(p.getName())); }}class Employee { private String name; private int age; public Employee() { } public Employee(String n, int a) { this.name = n; this.age = a; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}

Above program produces below output.

上面的程序产生下面的输出。

PankajDean

If we want to get the first employee only with age over 32, then we can use filter with findFirst method as shown below.

如果我们只想获取年龄在32岁以上的第一位员工,则可以将filter与findFirst方法结合使用,如下所示。

Optional
empO = empList.stream().filter(p -> (p.getAge() > 32)).findFirst();if(empO.isPresent()) System.out.println(empO.get().getName()+","+empO.get().getAge());

That’s all for java stream filter examples.

Java流过滤器示例的全部内容。

Reference:

参考:

翻译自:

java stream过滤

转载地址:http://bhlzd.baihongyu.com/

你可能感兴趣的文章
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
自定义滚动条
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>
初识前端作业1
查看>>
ffmpeg格式转换命令
查看>>
万方数据知识平台 TFHpple +Xpath解析
查看>>
Hive实现oracle的Minus函数
查看>>
秒杀多线程第四篇 一个经典的多线程同步问题
查看>>
RocketMQ配置
查看>>
vs code调试console程序报错--preLaunchTask“build”
查看>>
蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
查看>>
端口号大全
查看>>