2016-12-05 50 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