Java 8 - 收集器Collectors_分区partitioningBy

2021-08-17 16:52:35 浏览数 (2)


概述

分区是分组的特殊情况:由一个谓词(返回一个布尔值的函数)作为分类函数,它称分区函数

分区函数返回一个布尔值,这意味着得到的分组 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());

0 人点赞