概述
分区是分组的特殊情况:由一个谓词(返回一个布尔值的函数)作为分类函数,它称分区函数 。
分区函数返回一个布尔值,这意味着得到的分组 Map 的键类型是 Boolean ,于是它最多可以分为两组—— true 是一组, false 是一组
Demo
举个例子: 把菜单按照素食和非素食分开
代码语言:javascript复制 Map<Boolean, List<Dish>> collect = menu.stream().collect(partitioningBy(Dish::isVegetarian));
// 素菜
System.out.println(collect.get(true));
通过 Map 中键为 true 的值,就可以找出所有的素菜了 。
当然了,用同样的分区谓词,对菜单 List 创建的流作筛选,然后把结果收集到另外一个 List中也可以获得相同的结果
代码语言:javascript复制 List<Dish> xx = menu.stream().filter(Dish::isVegetarian).collect(toList());