Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以结合功能分组对流进行分区吗?_Java_Collections_Java 8_Java Stream_Grouping - Fatal编程技术网

Java 我可以结合功能分组对流进行分区吗?

Java 我可以结合功能分组对流进行分区吗?,java,collections,java-8,java-stream,grouping,Java,Collections,Java 8,Java Stream,Grouping,我正在按如下方式对流进行分组和分区: // Partioning Map<Boolean, List<Person>> partitioned = persons.stream(). collect(Collectors.partitioningBy(p -> p.getAge() > 20)); // Grouping Map<String, List<Pers

我正在按如下方式对流进行分组和分区:

// 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()));
//分区
Map partitioned=persons.stream()。
collect(collector.partitionby(p->p.getAge()>20));
//分组
Map group=persons.stream()
.collect(Collectors.groupingBy(p->p.getCity());
有没有办法把这两者结合起来?我尝试将两者结合使用,并在PartitionBy中使用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)); 
List persons=Arrays.asList(
新人(“Max”,18岁),
新人(“彼得”,23岁),
新人(“帕梅拉”,23岁),
新人(“大卫”,12岁),
新人(“Pam”,12));

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

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

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

我尝试了下面的方法,看看它是如何工作的

Map<Boolean, Map<Object, List<Person>>> rr = persons.stream()
                                            .collect(Collectors.partitioningBy(p -> p.name.startsWith("P"), 
                                                    Collectors.groupingBy(p -> p.age > 20)));
但是,我不确定这是否是有效的方法。有什么建议吗

预期的结果是将姓名为 以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()))));
预期的结果是将姓名为 以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()))));

预期的结果是什么?这些语句工作正常。@Tunaki进行了编辑以查看预期。请查看下游收集器。@Holger更改了这些语句,很抱歉,我这边的输入错误。预期的结果是什么?这些语句工作正常。@Tunaki进行了编辑以查看预期。看看下游收集器。@Holger更改了语句,很抱歉,我这边的输入错误。没有绝对的效率。由于代码根本不符合您在问题中提出的要求,因此相对于您最初的目标,它的效率非常低。当然,它背后的模式足以解决您最初的问题。没有绝对的效率。由于代码根本不符合您在问题中提出的要求,因此相对于您最初的目标,它的效率非常低。当然,它背后的模式足以解决您最初的问题。