Java List<对象> 根据对象的一个属性分组
时间: 2024-05-10 21:14:00 浏览: 14
可以使用Java 8的stream API和Collectors.groupingBy()方法来根据对象的一个属性进行分组。假设我们有一个名为Person的类,其中有name和age两个属性,我们要根据name属性将List中的Person对象进行分组,代码如下:
```java
List<Person> persons = ... // 假设这里有一个Person对象的List
Map<String, List<Person>> personsGroupedByNames = persons.stream()
.collect(Collectors.groupingBy(Person::getName));
```
这样就可以得到一个Map,其中键为name属性的值,值为对应name属性的全部Person对象列表。
相关问题
java8 list<对象> 转map<属性,List<属性>>
可以使用Java 8中的Stream API来实现List<对象>转换为Map<属性, List<属性>>。具体实现如下:
假设有一个类Person,包含属性name和age:
```
public 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;
}
}
```
现在有一个List<Person> persons,我们需要将其按照年龄age分组,得到Map<Integer, List<String>>,其中Integer表示年龄,List<String>表示同一年龄的人名字列表。可以使用如下代码实现:
```
Map<Integer, List<String>> ageToNamesMap = persons.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.mapping(Person::getName, Collectors.toList())));
```
上述代码中,groupingBy方法用于按照年龄age分组,mapping方法用于将Person对象转换为对应的名字字符串,toList方法则将所有名字字符串收集到一个List中。
注意,如果有多个Person对象的年龄相同,它们的名字会被添加到同一个List中。
LIst<T> 根据其中的一个属性分组Stream
可以使用 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 两个人。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)