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());