May 2025
Intermediate to advanced
414 pages
4h 48m
Chinese
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
几乎所有程序都要处理数据,而且很可能是以集合(Collections)的形式处理数据。 命令式方法使用循环来遍历元素,依次处理每个元素。 不过,函数式语言更喜欢声明式方法,有时甚至从一开始就没有经典的循环语句。
Java 8 中引入的Streams API 提供了一种完全声明式和懒散评估式的数据处理方法,通过利用高阶函数进行大部分操作,该方法从 Java 的函数式添加中获益匪浅。
本章将向你介绍命令式数据处理和声明式数据处理之间的区别,然后将对 Streams 进行直观介绍,突出其基本概念,并向你展示如何最大限度地利用其灵活性来实现功能更强的数据处理方法。
处理数据是一项日常工作,您可能已经遇到过无数次,而且今后还会继续遇到。
从广义上讲,任何类型的数据处理都像一个流水线,由一个数据结构(如集合)提供元素,然后进行一个或多个操作(如过滤或转换元素),最后产生某种形式的结果。 结果可能是另一个数据结构,甚至可能用来运行另一个任务。
让我们从一个简单的数据处理示例开始。
假设我们需要从Book 实例列表中按标题排序找到 1970 年以前的三本科幻小说。例 6-1展示了如何使用典型的命令式方法和for 循环来实现这一目标。
for 循环查找图书recordBook(Stringtitle,intyear,Genregenre){// NO BODY}// DATA PREPARATIONList<Book>books=...;Collections.sort(books,Comparator.comparing(Book::title));// FOR-LOOPList<String>result=newArrayList<>();for(varbook:books){if(book.year()>=1970){continue;}if(book.genre()!=Genre.SCIENCE_FICTION){continue;}vartitle=book.title();result.add(title);if(result.size()==3){break;}}
一个未排序的书籍集合,必须是可变的,以便下一步就地排序。 ...
Read now
Unlock full access