Java 有一个List放着实体类 这个类有一个字段是名字 想根据名字把这个List用Stream流转换成Map<String,List<>>
时间: 2023-05-24 10:03:08 浏览: 235
A:
可以使用Java 8中的Stream API和Collectors工具类来实现将List转换成Map的功能。具体实现如下所示:
```
Map<String, List<Entity>> map = list.stream()
.collect(Collectors.groupingBy(Entity::getName));
```
其中,list是放着实体类的List,Entity是实体类,getName是实体类中表示名字的字段。使用groupingBy操作符将实体类按照名字分组,然后将分组的结果转换成Map<String,List<Entity>>类型的对象。
需要注意的是,该代码片段假设实体类中的字段名为name,如果实际情况中字段名不是name,则需要替换该字段名。
相关问题
Java 有一个List放着实体类 这个类有一个字段是名字 想根据名字把这个List用Stream流分类并且对实体类工时字段进行统计
A:
可以使用Java 8中的Stream流和Collectors工具类来实现这个需求。
首先定义一个实体类,假设这个实体类的名字为Person,其中包含一个名字字段name和一个工作小时数字段workingHours:
```
public class Person {
private String name;
private int workingHours;
public Person(String name, int workingHours) {
this.name = name;
this.workingHours = workingHours;
}
public String getName() {
return name;
}
public int getWorkingHours() {
return workingHours;
}
}
```
然后,假设有一个List<Person> list,我们要根据名字对它进行分类并对工作小时数进行统计:
```
Map<String, Integer> result = list.stream()
.collect(Collectors.groupingBy(Person::getName,
Collectors.summingInt(Person::getWorkingHours)));
```
上述代码中,使用了groupingBy()方法将List<Person>按照Person的名字进行分组,并且使用summingInt()方法对每一组中的Person的工作小时数进行统计求和。最终得到一个Map<String, Integer>类型的结果,其中键为名字,值为对应名字的工作小时数总和。
注意:结果中可能还有一些没有名字的Person,这些Person的名字为null,我们可以在最后将它们单独分组或者过滤掉即可。
阅读全文