2016-12-05 82 views
0

我分组和partioning流如下:我可以通过功能分组结合分组吗?

// 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())); 

有没有一种方法,我可以结合这两种?我尝试了使用groupingBy在partioningBy中进行组合,但没有得到正确的结果。任何建议?

预期的结果是对那些名字以P开头并按年龄分组的人进行分区。 这里是人名单: 名单的人=

Arrays.asList(
      new Person("Max", 18), 
      new Person("Peter", 23), 
      new Person("Pamela", 23), 
      new Person("David", 12), 
      new Person("Pam", 12)); 
+1

预期结果会是什么? – Tunaki

+0

这些陈述工作正常。 – KayV

+0

@Tunaki进行了编辑以查看预期。 – KayV

回答

0

我尝试以下和somhow它的工作。

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]}} 

但是,我不知道是不是这样做的有效途径。有什么建议么?

+3

没有绝对的效率。由于代码甚至不能远程回答您在问题中提出的问题,因此就您的原始目标而言效率非常低。当然,它背后的模式足以解决您的原始问题。 – Holger