groupingBy和partitioningBy之间的另一个区别是前者采用了一个Function super T, ? extends K>Function super T, ? extends K>Function super T, ? extends K> ,后者是Predicate super T>Predicate super T> 。
class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public String toString() { return this.name; } } public class CollectorAndCollectPrac { public static void main(String[] args) { Person p1 = new Person("Kosa", 21); Person p2 = new Person("Saosa", 21); Person p3 = new Person("Tiuosa", 22); Person p4 = new Person("Komani", 22); Person p5 = new Person("Kannin", 25); Person p6 = new Person("Kannin", 25); Person p7 = new Person("Tiuosa", 22); ArrayList list = new ArrayList<>(); list.add(p1); list.add(p2); list.add(p3); list.add(p4); list.add(p5); list.add(p6); list.add(p7); // groupingBy Map> list2 = new HashMap>(); list2 = list.stream().collect(Collectors.groupingBy(p -> p.getAge() == 22)); System.out.println("grouping by age -> " + list2); // partitioningBy Map> list3 = new HashMap>(); list3 = list.stream().collect(Collectors.partitioningBy(p -> p.getAge() == 22)); System.out.println("partitioning by age -> " + list2); } }