当前位置: 首页 > 知识库问答 >
问题:

我可以结合功能分组来划分流吗?

凌宏大
2023-03-14

我分组和分区流如下:

// Partioning
Map<Boolean, List<Person>> partitioned = persons.stream().
                                          collect(Collectors.partitioningBy(p -> p.getAge() > 20));

// Grouping
Map<String, List<Person>> grouped = persons.stream()
                                .collect(Collectors.groupingBy(p -> p.getCity()));

有没有办法把这两者结合起来?我尝试将两者结合使用,并在PartionBy中使用groupingBy,但没有成功。有什么建议吗?

预期的结果是将这些人与以P开头的人分开,并按年龄分组。以下是人员名单:

List<Person> persons = Arrays.asList(
            new Person("Max", 18),
            new Person("Peter", 23),
            new Person("Pamela", 23),
            new Person("David", 12),
            new Person("Pam", 12)); 

共有2个答案

戚高洁
2023-03-14

预期的结果是将这些人与以P开头的人分开,并按年龄分组

从这个问题来看,您似乎不需要在groupingBy执行条件检查:

Map<Boolean, Map<Integer, List<String>>> rr = persons.stream()
        .collect(Collectors.partitioningBy(p -> p.getName().startsWith("P"),
                Collectors.groupingBy(Person::getAge,
                        // just for printing the output below
                        Collectors.mapping(Person::getName, Collectors.toList()))));

这将导致您输入到:

{false={18=[Max], 12=[David]}, true={23=[Peter, Pamela], 12=[Pam]}}
 ^                                    ^
 partitioned (startsWith P)          grouped by(age)          
麻鹏鹍
2023-03-14

我尝试了以下方法,并了解了它的工作原理。

Map<Boolean, Map<Object, List<Person>>> rr = persons.stream()
                                            .collect(Collectors.partitioningBy(p -> p.name.startsWith("P"), 
                                                    Collectors.groupingBy(p -> p.age > 20)));

产量如预期

rr = {false={false=[Max, David]}, true={false=[Pam], true=[Peter, Pamela]}}

但是,我不确定这是否是有效的方法。有什么建议吗?

 类似资料:
  • 功能分支工作流在集中式工作流的基础上又扩展了一下。在集中式工作流里,大家都往远程的一个 master 分支上 push 提交,使用功能分支工作流,开发者不直接向 master 上 push,他们在各自的本地创建新的分支,去开发新功能,去修复 Bug ,去实验自己的想法。 完成以后,开发者可以把这些功能分支 push 到远程仓库,然后可以提交一个 pull request,这样可以跟项目的其他协作开

  • 问题内容: 您不能(不应该)将非聚合放在查询行中。 但是,我想访问与最大关联的非聚合之一。用简单的英语来说,我想要一个带有每种类型的最早ID的表。 该查询为我提供了我所需要的信息: 但这不是最有用的形式。我真的想要与每一行相关联,以便可以在以后的查询中使用它。 我正在寻找这样的东西: 输出如下: 似乎确实应该有一种无需加入即可获取此信息的方法。我只需要SQL引擎在计算最大值时记住其他列。 问题答案

  • 问题内容: 我需要让 我 部门中薪水最低的员工 使用反加入来做到。 但有人告诉我,可以通过 使用一次select的 window函数来做到这一点。但是我不能按department_id分组并同时使用它。那是虫子还是我愚蠢? SQL Developer说00979。00000-“不是GROUP BY表达式” 问题答案: 如果您运行第二个查询而没有(您可能已经尝试过)(从您发布的多余分号开始),您将看

  • 问题内容: 我有一个在Go中使用接口定义RPC样式接口的想法。因此,对于给定的服务,我可能会创建一个像这样的接口: 我想做的是使用反射来实现该接口,将方法调用转换为RPC调用,将输入参数编组,然后将结果编组回方法的输出。我知道,如果可以获取输入参数的[] interface {}接口,则可以使用反射进行服务调用。但是,我看不到有任何方法可以使用反射来动态创建一个值,该值可以通过调用使用反射的函数来

  • 问题内容: 1个 结果集 : 2个 结果集2: 有没有办法可以做到这一点: 我想在RHEL 5上使用Sybase 12.5的解决方案,我也想知道在其他任何数据库系统中是否可行。 -–谢谢您的回答- 问题答案: 通过为该列使用CASE / WHEN并基于true / false求和1或0,您可以在同一查询中获得这两者。此外,如果您希望将另一个值的总和作为另一个,则可以执行相同的操作列…只需将其替换为

  • 很多同学在搭建项目的时候,往往忽略项目结构的划分,实际上合理的项目划分往往能够提供规范的项目搭建思路。 在 dva 架构的项目中,我们推荐的目录基本结构为: . ├── /mock/ # 数据mock的接口文件 ├── /src/ # 项目源码目录 │ ├── /components/ # 项目组件 │ ├── /routes/ # 路由组