Java 8流过滤器示例

时间:2020-02-23 14:34:53  来源:igfitidea点击:

在本教程中,我们将看到Java 8流过滤器示例。

我们可以将列表或者数组转换为 stream非常轻松并在其顶部执行各种操作.java 8流提供各种方法,如map

filterreduce等。

Java 8流过滤器

正如名字所建议的那样, filter方法用于根据标准滤波流。
我们可以将Lambda表达式传递给过滤方法,但它应该始终返回一个

boolean value
我们已经看到了如何通过谓词对象来过滤方法来过滤集合。

让我们在举例的帮助下了解更多:让我们说你有 Student程序如下:

package org.igi.theitroad;
 
public class Student {
 
	private int id;
	private String name;
	private String gender;
	private int age;
 
	public Student(int id, String name, String gender, int age) {
		super();
		this.id = id;
		this.name = name;
		this.gender = gender;
		this.age = age;
	}
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public String getGender() {
		return gender;
	}
 
	public void setGender(String gender) {
		this.gender = gender;
	}
 
	public int getAge() {
		return age;
	}
 
	public void setAge(int age) {
		this.age = age;
	}
 
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]";
	}
}

让我们说你有学生对象列表 studentList你需要过滤所有男学生。
我们可以通过以下代码的流的帮助来完成:

//Filter all male students
List maleStudents=studentList.stream()
.filter(s-> s.getGender().equalsIgnoreCase("M") )
.collect(Collectors.toList());
System.out.println("Male students are :"+maleStudents);

其中我们使用了Stream的 filter过滤列表的方法,然后将结果收集到另一个列表 Collectors.toList()

Java 8过滤器,findany或者orelse方法

我们可以使用Stream的过滤方法来过滤列表和使用 findAnyorElse基于条件的方法。
例如:我们想要过滤名称的学生 John,如果我们在列表中没有找到它然后返回 null

//Filer based on name
Student student=studentList.stream()
.filter(s-> s.getName().equalsIgnoreCase("John"))
.findAny()
.orElse(null); 
System.out.println("Student with Name john :"+student);

让我们创建一个主要类:

package org.igi.theitroad;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
 
public class Java8StreamFilterExamples {
 
	public static void main(String[] args)
	{	
		List studentList=createStudentList();	
		
		//Filter all male students
		List maleStudents=studentList.stream()
                .filter(s>s.getGender().equalsIgnoreCase("M"))
                .collect(Collectors.toList());
		System.out.println("Male students are :"+maleStudents);
		
                //Filter based on name
		Student student=studentList.stream()
                .filter(s-> s.getName().equalsIgnoreCase("John"))
                .findAny()
                .orElse(null); 
		System.out.println("Student with Name john :"+student);
	}
 
	public static List createStudentList()
	{
		List studentList=new ArrayList();
		Student s1=new Student(1, "igi", "M", 19);
		Student s2=new Student(2, "John", "M", 17);
		Student s3=new Student(3, "Mary", "F", 14);
		Student s4=new Student(4, "Martin", "M", 21);
		Student s5=new Student(5, "Monica", "F", 16);
		Student s6=new Student(6, "Ally", "F", 20);
		
		studentList.add(s1);
		studentList.add(s2);
		studentList.add(s3);
		studentList.add(s4);
		studentList.add(s5);
		studentList.add(s6);
		return studentList;
	}
}

运行上面的程序时,我们将得到以下输出:

Male students are :[Student [id=1, name=igi, gender=M, age=19], Student [id=2, name=John, gender=M, age=17], Student [id=4, name=Martin, gender=M, age=21]]
Student with Name john :Student [id=2, name=John, gender=M, age=17]