10 基于Lambda的领域特定语言
使用领域特定语言(DSL)来表达应用的业务逻辑。历史上,Java由于它的僵硬和极度烦琐,很少被用于实现精简DSL,即使有人使用了DSL,也不便于非技术岗的人阅读和理解。不过,现在由于Java支持了Lambda表达式,Lambda在降低代码复杂度方面的威力巨大。
10.2 现代Java API中的小型DSL
Java8中的Comparator接口已经更新采用了这种新的方法。
Collections.sort(persons, new Comparator<Person>() {public int compare(Person p1, Person p2) {return p1.getAge() - p2.getAge();}});
使用更紧凑的Lambda表达式替换内部类
Collections.sort(people, (p1, p2) -> p1.getAge() - p2.getAge());
10.2.1 把Stream API当成DSL去操作集合
Stream接口是小型内部DSL引入原省Java API非常好的一个例子。事实上,Stream是一个紧凑却强大的DSL,它可以对集合中的元素进行过滤,排序、转换、归并等操作。
10.2.2 将Collector作为DSL汇总数据
Collector接口也可以作为DSL,对数据进行分析汇总。
