当前位置:嗨网首页>书籍在线阅读

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