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

20-案例实现

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

案例实现

根据如下步骤实现本案例。

1.首先,要实现将在本案例中使用的辅助类。先创建 Person 类来存储一个人的基本属性,然后创建 PersonGenerator 类来生成一个包含随机 Person 对象的列表。这两个类的源代码参见6.5节。

2.然后创建一个包含 main() 方法的 Main 类。在 main() 方法里,先用 Person-Generator 创建一个列表,它应包含随机的 Person 对象。然后用 forEach() 方法打印生成的元素:

public class Main {
  public static void main(String[] args) {
    List<Person> persons=PersonGenerator
                                .generatePersonList(10);
    persons.parallelStream().forEach(p-> {
      System.out.printf("%s, %s\n", p.getLastName(),
                        p.getFirstName());
    });

3.接着用 distinct() 方法去除重复的对象,并用 forEach() 方法把过滤后剩下的元素打印出来:

persons.parallelStream().distinct().forEach(p-> {
  System.out.printf("%s, %s\n", p.getLastName(),
                    p.getFirstName());
});

4.然后用一个数字数组来测试 distinct() 方法。先创建一个有重复数字的数组,然后用 Arrays 类的 asList() 方法把其转换为 List 。接着调用 ListparallelStream() 方法创建并行流,用 mapToInt() 将其转换成 IntStream ,然后用 distinct() 方法删除重复的元素,最后用 forEach() 方法把得到的最终元素打印到控制台:

Integer[] numbers={1,3,2,1,2,2,1,3,3,1,1,3,2,1};
Arrays.asList(numbers).parallelStream().mapToInt(n -> n)
                                .distinct().forEach( n -> {
  System.out.printf("Number: %d\n", n);
});

5.现在,使用 filter 方法从包含随机人员的列表中获取工资低于3000的人,这里用lambda表达式来创建一个断言,以表示该条件。和其他例子一样,这里也用 forEach() 方法打印结果元素:

persons.parallelStream().filter(p -> p.getSalary() < 30000)
                                        .forEach( p -> {
  System.out.printf("%s, %s\n", p.getLastName(),
                    p.getFirstName());
});

6.然后,用 IntStream 测试 filter() 方法,获取小于2的数字:

Arrays.asList(numbers).parallelStream().mapToInt(n -> n)
                        .filter( n -> n<2).forEach(  n-> {
  System.out.printf("%d\n", n);
});

7.现在用 limit() 方法来限制元素的数量。比如,从包含随机人员的列表中创建一个并行流,并用 mapToDouble() 方法将其转换为 DoubleStream ,然后用 limit() 方法获取前5个元素:

persons.parallelStream().mapToDouble(p -> p.getSalary())
                               .sorted().limit(5).forEach(s-> {
  System.out.printf("Limit: %f\n",s);
});

8.最后,用 skip() 方法忽略流中一定数量的元素。先从包含随机人员的列表上创建一个并行流,用 mapToDouble() 方法将其转换为 DoubleStream ,最后用 skip() 方法忽略前5个元素:

persons.parallelStream().mapToDouble(p -> p.getSalary())
                                .sorted().skip(5).forEach(s-> {
  System.out.printf("Skip: %f\n",s);
});