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更改了语句,很抱歉,我这边的输入错误。没有绝对的效率。由于代码根本不符合您在问题中提出的要求,因此相对于您最初的目标,它的效率非常低。当然,它背后的模式足以解决您最初的问题。没有绝对的效率。由于代码根本不符合您在问题中提出的要求,因此相对于您最初的目标,它的效率非常低。当然,它背后的模式足以解决您最初的问题。