java List中对象属性名称一样进行分组 返回分组后list
时间: 2024-05-12 14:13:48 浏览: 84
可以使用Java 8的Stream API来实现。首先需要定义一个分组的条件,然后使用Collectors.groupingBy()方法进行分组。具体实现代码如下:
假设有一个对象列表List<Person>,其中Person类有一个属性name,需要按照name属性进行分组,返回分组后的列表List<List<Person>>:
```
List<List<Person>> groupedPersons = persons.stream()
.collect(Collectors.groupingBy(Person::getName))
.values()
.stream()
.collect(Collectors.toList());
```
解释一下上述代码:
1. 首先使用stream()方法将对象列表转换为Stream流。
2. 然后使用Collectors.groupingBy()方法进行分组,传入的参数是一个Function,这里使用Person::getName表示按照name属性进行分组。
3. 分组完成后,使用Map.values()方法获取所有的分组列表。
4. 最后使用Collectors.toList()方法将所有分组列表转换为一个List<List<Person>>。
这样就能够实现按照对象属性进行分组,并返回分组后的列表了。
相关问题
jdk1.8 list分组
你可以使用Java 8中的Stream API来对List进行分组,以下是示例代码:
假设我们有一个Person类,其中包含姓名和年龄属性:
```
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;
}
}
```
现在我们有一个Person对象的List,我们要按照年龄分组:
```
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 21));
persons.add(new Person("Bob", 22));
persons.add(new Person("Charlie", 21));
persons.add(new Person("Dave", 23));
persons.add(new Person("Eve", 22));
```
我们可以使用以下代码来按年龄分组:
```
Map<Integer, List<Person>> personsByAge = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
这个代码将会返回一个Map,其中键是年龄,值是该年龄的Person对象列表。你可以使用Map的get方法来获取特定年龄的人的列表。
如果你想按名称首字母分组,你可以使用以下代码:
```
Map<Character, List<Person>> personsByName = persons.stream()
.collect(Collectors.groupingBy(p -> p.getName().charAt(0)));
```
这个代码将会返回一个Map,其中键是名称的首字母,值是该首字母开头的Person对象列表。
Collectors.groupingBy 返回list
Collectors.groupingBy方法返回一个Map,其中的值是根据给定的分类函数进行分组的元素的列表(List)。 该方法的语法如下:
<T, K> Collector<T, ?, Map<K, List<T>>> groupingBy(Function<? super T, ? extends K> classifier)
具体来说,该方法接受一个分类函数(classifier),根据该函数将流中的元素进行分组,并将结果存储在一个Map中,其中键(Key)是由分类函数生成的结果,值(Value)是与该键对应的元素列表(List)。
例如,假设有一个Student类,包含姓名(name)和班级(className)属性。如果我们有一个包含多个Student对象的流,我们可以使用Collectors.groupingBy方法按照班级对Student进行分组,以获得一个Map,其中键是班级名称,值是该班级的学生列表。然后,我们可以通过collect方法将流转换为该分组结果。
总之,Collectors.groupingBy方法返回一个Map,其中的值是根据给定的分类函数进行分组的元素的列表(List)。
<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [2021-11-04](https://blog.csdn.net/weixin_42065558/article/details/121147253)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [【Java 8 新特性】Java 8 Collectors: groupingBy示例(将List进行分组)](https://blog.csdn.net/qq_31635851/article/details/116056907)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文