Java 8 Collectors
类
原文:https://www.studytonight.com/java-8/java-8-collectors-class
在 Java 8 版本中,增加了一个新的类来执行约简操作,例如将元素累积到集合中,根据各种标准汇总元素等。
Collectors
类适用于 Java 流,因此我们建议您了解流、Lambda 表达式、方法引用。如果您不熟悉这些内容,您可以在我们的门户网站上通过单击主题来阅读这些主题。
Collectors
是扩展对象类的最终类,位于 java.util.stream 包中。
申报
public final class Collectors extends Object
Collectors
类方法
以下是Collectors
类的方法。
|
修饰符和类型
|
方法和描述
|
| 静态Comparator
super T>Comparator
)Comparator
产生最大元素,描述为可选的Comparator
super T>Comparator
)Comparator
产生最小元素,描述为可选的
在所有这些例子中,我们使用一个类 Employee ,它包含员工的 id 、名称和工资作为实例变量,并使用一个构造器和 getter 、 setter 方法作为所有实例变量。让我们看看如何在Collectors
类中使用它。
例子
在这个例子中,我们使用Collectors
类的toList()
方法收集所有员工的姓名并将其存储到列表中。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Employee{
String id;
String name;
double salary;
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
public class STDemo {
public static void main(String[] args) {
List<Employee> emp = new ArrayList<>();
emp.add(new Employee("100", "Sohan", 120000));
emp.add(new Employee("101", "Mohan", 100050));
emp.add(new Employee("102", "Rohan", 500050));
emp.add(new Employee("103", "John", 5000.20));
List<String> names = emp.stream().map(Employee::getName).collect(Collectors.toList());
System.out.println(names);
}
}
【素汉、莫汉、罗翰、约翰】
示例:TreeSet
在这个例子中,我们将所有员工的名字放入一个集合TreeSet
。该集合用于存储唯一元素,并查看结果是否包含员工的重复姓名。
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
public class STDemo {
public static void main(String[] args) {
List<Employee> emp = new ArrayList<>();
emp.add(new Employee("100", "Sohan", 120000));
emp.add(new Employee("101", "Mohan", 100050));
emp.add(new Employee("102", "Rohan", 500050));
emp.add(new Employee("103", "Sohan", 5000.20));
Set<String> names = emp.stream().map(Employee::getName).collect(Collectors.toCollection(TreeSet::new));
System.out.println(names);
}
}
【莫汉、罗翰、索山】
示例:以字符串形式收集数据
在本例中,我们使用joining()
方法收集所有员工的姓名,并用逗号分隔。方法在收集记录后返回一个字符串。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class STDemo {
public static void main(String[] args) {
List<Employee> emp = new ArrayList<>();
emp.add(new Employee("100", "Sohan", 120000));
emp.add(new Employee("101", "Mohan", 100050));
emp.add(new Employee("102", "Rohan", 500050));
emp.add(new Employee("103", "Sohan", 5000.20));
String names = emp.stream().map(Employee::getName).collect(Collectors.joining(", "));
System.out.println(names);
}
}
索山、莫汉、罗翰、索山
示例:
在这个例子中,我们使用 Collectors 类的summingDouble()
方法得到所有员工的工资总和。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class STDemo {
public static void main(String[] args) {
List<Employee> emp = new ArrayList<>();
emp.add(new Employee("100", "Sohan", 120000));
emp.add(new Employee("101", "Mohan", 100050));
emp.add(new Employee("102", "Rohan", 500050));
emp.add(new Employee("103", "Sohan", 5000.20));
double totalSalary = emp.stream()
.collect(Collectors.summingDouble((Employee::getSalary)));
System.out.println(totalSalary);
}
}
725100.2
示例:
我们可以使用maxBy()
方法从工资列表中获得最高的工资。它根据提供的元素顺序返回列表中可用的最高记录。
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class STDemo {
public static void main(String[] args) {
List<Employee> emp = new ArrayList<>();
emp.add(new Employee("100", "Sohan", 120000));
emp.add(new Employee("101", "Mohan", 100050));
emp.add(new Employee("102", "Rohan", 500050));
emp.add(new Employee("103", "Sohan", 5000.20));
Optional<Double> highSalary = emp.stream().map(Employee::getSalary).collect(Collectors.maxBy(Comparator.naturalOrder()));
System.out.println("Highest Salary : "+highSalary.get());
}
}
最高工资:500050.0