📅  最后修改于: 2023-12-03 15:36:29.258000             🧑  作者: Mango
在 Java 中,我们可以使用流来处理集合中的元素。流提供了对集合元素的函数式操作,使得我们能够以一种更简洁、更清晰的方式处理集合。流具有并行处理的特性,能够优化大规模数据集的处理效率。
在本文中,我们将介绍如何使用 Java 流过滤器(Stream Filter)来查找对象集合中一个属性的总和。
为了演示这种方式,我们需要提前准备一个包含对象的集合。为了简单起见,我们此处使用一个存放人员信息的 Person 类来作为对象。
public class Person {
private String name;
private int age;
private double salary;
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
}
创建一个包含多个 Person 对象的集合:
List<Person> personList = new ArrayList<>();
personList.add(new Person("Tom", 23, 5000.0));
personList.add(new Person("Jerry", 24, 6000.0));
personList.add(new Person("Jack", 25, 7000.0));
personList.add(new Person("Rose", 26, 8000.0));
personList.add(new Person("Lucy", 27, 9000.0));
现在,我们有了一个包含多个 Person 对象的集合(personList)。每个 Person 对象都包含三个属性:name、age 和 salary。
现在,我们可以使用 Java 流过滤器来查找这些对象的 salary 总和了。
在 Java 8 中,我们可以使用 stream.filter() 方法来过滤集合中的元素。它需要传递一个 Predicate 参数,用于过滤集合中的元素,得到一个新的流。
public Stream<T> filter(Predicate<? super T> predicate)
现在,我们来使用 filter() 方法和 Stream 的 reduce() 方法来查找 salary 总和:
double total = personList.stream()
.mapToDouble(Person::getSalary)
.reduce(0, Double::sum);
在这段代码中:
代码如下:
double total = personList.stream()
.mapToDouble(Person::getSalary)
.reduce(0, Double::sum);
为了更好地理解上述代码,我们来展示一下完整的示例代码:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person("Tom", 23, 5000.0));
personList.add(new Person("Jerry", 24, 6000.0));
personList.add(new Person("Jack", 25, 7000.0));
personList.add(new Person("Rose", 26, 8000.0));
personList.add(new Person("Lucy", 27, 9000.0));
double total = personList.stream()
.mapToDouble(Person::getSalary)
.reduce(0, Double::sum);
System.out.println("Total salary: " + total);
}
}
class Person {
private String name;
private int age;
private double salary;
public Person(String name, int age, double salary) {
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public double getSalary() {
return salary;
}
}
在本文中,我们介绍了如何使用 Java 流过滤器查找对象集合中一个属性的总和。通过使用 Java 8 中引入的流,我们能够以一种更简洁、更清晰的方式处理集合。在大规模数据集的处理中,流还能发挥出并行处理的优势。