LIst<T> 根据其中的一个属性分组Stream
时间: 2023-08-10 16:05:19 浏览: 98
java ArrayList按照同一属性进行分组
可以使用 Java 8 的 Stream API 来对 List<T> 进行分组操作,具体实现方法如下:
1. 首先需要定义一个用于分组的属性,假设该属性为 objProperty。
2. 利用 Stream 的 collect(Collectors.groupingBy()) 方法对 List 进行分组,其中 Collectors.groupingBy() 方法的返回值为 Map<K, List<T>>,其中 K 表示分组的键,List<T> 表示分组的值。
代码示例:
```
Map<Object, List<T>> groups = list.stream().collect(Collectors.groupingBy(T::getObjProperty));
```
其中 T::getObjProperty 表示获取 T 对象的 objProperty 属性值。
3. 最终得到的 groups 就是按照 objProperty 属性分组后的结果。
完整代码示例:
```
public class Test {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person("Tom", 20));
persons.add(new Person("Jerry", 25));
persons.add(new Person("Lucy", 20));
persons.add(new Person("Lily", 25));
Map<Integer, List<Person>> groups = persons.stream().collect(Collectors.groupingBy(Person::getAge));
System.out.println(groups);
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
```
输出结果为:
```
{20=[Person{name='Tom', age=20}, Person{name='Lucy', age=20}], 25=[Person{name='Jerry', age=25}, Person{name='Lily', age=25}]}
```
可以看到,按照年龄属性分组后,年龄为 20 的有 Tom 和 Lucy 两个人,年龄为 25 的有 Jerry 和 Lily 两个人。
阅读全文