从Collectors.partitioningBy返回非类类型

T4l*_*l0n 3 java java-8 java-stream collectors

在这个例子中

Stream<MyClass>stream = Stream.of(new MyClass(5),new MyClass(15),new MyClass(8),new MyClass(12));

Map<Boolean, List<Integer>> map =
        stream.collect(Collectors.partitioningBy(a->a.getNum()<10));
Run Code Online (Sandbox Code Playgroud)

stream.collect检索地图布尔并List<MyClass>因此它不工作.我应该怎么做才能回到地图BooleanList<Integer>呢?

Hol*_*ger 6

通常,当您想要在一个groupingBy或一个partitioningBy操作中使用不同的聚合时,您可以通过指定另一个聚合来执行此操作,Collector如:

Map<Boolean, List<Integer>> map
    = stream.collect(Collectors.partitioningBy(a -> a.getNum()<10,
        Collectors.mapping(MyClass::getNum, Collectors.toList())));
Run Code Online (Sandbox Code Playgroud)

但是,当分区函数和聚合函数都在同一个属性上工作时,map前面的元素值更容易:

Map<Boolean, List<Integer>> map2
    = stream.map(MyClass::getNum).collect(Collectors.partitioningBy(num -> num<10));
Run Code Online (Sandbox Code Playgroud)