32-案例实现
案例实现
根据如下步骤实现本案例。
1.首先,实现将在本案例中使用的辅助类。先创建 Person 类来存储一个人的基本属性,然后创建 PersonGenerator 类来生成一个包含随机 Person 对象的 List 。这两个类的源代码参见6.5节。
2.然后创建一个包含 main() 方法的 Main 类。在 main() 方法里,先使用 Person-Generator 创建一个包含随机 Person 对象的 List :
public class Main {
public static void main(String[] args) {
List<Person> persons = PersonGenerator.generatePersonList(10);
3.然后计算工资字段的最大值和最小值,以验证所有的计算结果是否正确。我们使用两个流进行计算—第一个使用 map() 和 max() 方法,第二个使用 mapToInt() 和 min() 方法:
int maxSalary=persons.parallelStream().map(p -> p.getSalary())
.max(Integer::compare).get();
int minSalary=persons.parallelStream().mapToInt(p -> p
.getSalary()).min().getAsInt();
System.out.printf("Salaries are between %d and %d\n", minSalary,
maxSalary);
4.现在测试所有的条件。首先,用 allMatch() 方法和一个lambda表达式来验证是否所有人的工资都大于0:
boolean condition;
condition=persons.parallelStream().allMatch
(p -> p.getSalary() > 0);
System.out.printf("Salary > 0: %b\n", condition);
5.重复这个条件,查看是否所有人的工资都大于10000和30000。
condition=persons.parallelStream().allMatch
(p -> p.getSalary() > 10000);
System.out.printf("Salary > 10000: %b\n",condition);
condition=persons.parallelStream().allMatch
(p -> p.getSalary() > 30000);
System.out.printf("Salary > 30000: %b\n",condition);
6.然后调用 anyMatch() 方法查看是否有人的工资都大于50000和100000:
condition=persons.parallelStream().anyMatch
(p -> p.getSalary() > 50000);
System.out.printf("Any with salary > 50000: %b\n",condition);
condition=persons.parallelStream().anyMatch
(p -> p.getSalary() > 100000);
System.out.printf("Any with salary > 100000: %b\n",condition);
7.调用 noneMatch() 方法完成这些测试,验证出没有人的工资大于100000:
condition=persons.parallelStream().noneMatch
(p -> p.getSalary() > 100000);
System.out.printf("None with salary > 100000: %b\n",condition);
8.接着,调用 findAny() 方法从流中随机获取一个 Person 对象:
Person person = persons.parallelStream().findAny().get();
System.out.printf("Any: %s %s: %d\n", person.getFirstName(),
person.getLastName(), person.getSalary());
9.调用 findFirst() 方法从流中获取第一个 Person 对象:
person = persons.parallelStream().findFirst().get();
System.out.printf("First: %s %s: %d\n", person.getFirstName(),
person.getLastName(), person.getSalary());
10.最后调用 sorted() 方法以工资高低对流进行排序,传入一个以lambda表达式表示的 Comparator ,然后调用 findFirst() 方法获取一个 Person 对象。此时获取的 Person 对象有着最低的工资:
person = persons.parallelStream().sorted((p1,p2) -> {
return p1.getSalary() - p2.getSalary();
}).findFirst().get();
System.out.printf("First Sorted: %s %s: %d\n",
person.getFirstName(), person.getLastName(),
person.getSalary());