List<T> 按照ID分组 Map<Long,T>
时间: 2024-10-19 16:08:37 浏览: 19
`List<T>` 是一个泛型集合,用于存储同一种类型的元素,并按线性顺序排列。如果你想按照某个特定字段(如ID)对其进行分组,通常你会将列表转换为 `Map<Long, List<T>>` 的形式,这里的 `Long` 表示分组的依据(比如 ID),而 `List<T>` 则作为每个组内的元素集合。
举个例子,如果你有一个包含员工信息的 `List<Employee>`,你想根据每个员工的 `id` 分组,你可以这样做:
```java
Map<Long, List<Employee>> employeeGroups = new HashMap<>();
for (Employee emp : employees) {
if (!employeeGroups.containsKey(emp.getId())) {
employeeGroups.put(emp.getId(), new ArrayList<>());
}
employeeGroups.get(emp.getId()).add(emp);
}
```
这样一来,`employeeGroups` 就是一个映射,键是员工ID,值是包含相应ID员工的列表。
相关问题
Map<Long, List<T>> 用 lambda 将List<T>一字段放入集合
Map<Long, List<T>> 是一个键值对的集合,其中键的类型是 Long,值的类型是 List<T>。Lambda 表达式可以用来将 List<T> 中的某个字段放入集合中。
下面是一个示例代码,展示了如何使用 Lambda 表达式将 List<T> 中的某个字段放入集合中:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
public static void main(String[] args) {
List<Person> personList = new ArrayList<>();
personList.add(new Person(1L, "Alice"));
personList.add(new Person(2L, "Bob"));
personList.add(new Person(3L, "Charlie"));
Map<Long, List<String>> map = new HashMap<>();
personList.forEach(person -> {
Long id = person.getId();
String name = person.getName();
map.computeIfAbsent(id, k -> new ArrayList<>()).add(name);
});
System.out.println(map);
}
static class Person {
private Long id;
private String name;
public Person(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
}
}
```
在上述代码中,我们定义了一个 Person 类,其中包含了 id 和 name 两个字段。我们将多个 Person 对象放入 personList 中。然后,我们创建了一个空的 map 对象,用于存储结果。通过使用 forEach 方法遍历 personList,对于每个 Person 对象,我们获取其 id 和 name,然后使用 computeIfAbsent 方法将 name 放入对应的 List 中,并将该 List 放入 map 中。最后,我们打印出 map 的内容。
List<UserInfo> 转换成 Map<Long,List<UserInfo>>
要将List<UserInfo>转换成Map<Long,List<UserInfo>>,可以使用foreach标签来实现。首先,在mapper层的SysUserMapper.java文件中,可以定义一个方法来实现这个转换操作。方法的参数是List<UserInfo> userList,表示要转换的列表。在方法内部,可以使用Java的foreach循环遍历列表,将每个UserInfo对象的id作为键,将对象本身添加到对应的值列表中。最后,将键值对添加到一个Map<Long,List<UserInfo>>对象中,并将其返回。
下面是一种可能的实现方式:
```java
public Map<Long, List<UserInfo>> convertListToMap(List<UserInfo> userList) {
Map<Long, List<UserInfo>> resultMap = new HashMap<>();
for (UserInfo userInfo : userList) {
Long id = userInfo.getId();
if (resultMap.containsKey(id)) {
resultMap.get(id).add(userInfo);
} else {
List<UserInfo> list = new ArrayList<>();
list.add(userInfo);
resultMap.put(id, list);
}
}
return resultMap;
}
```
这样,当调用该方法并传入List<UserInfo>对象时,将返回一个Map<Long,List<UserInfo>>对象,其中每个键是UserInfo对象的id,对应的值是具有相同id的UserInfo对象列表。
请注意,以上只是一种可能的实现方式,具体的实现方式可能因具体需求而有所不同。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Mybatis/Ibatis框架--动态SQL, foreach标签与List<T>、数组参数案例](https://blog.csdn.net/dear_Alice_moon/article/details/87534656)[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: 100%"]
[ .reference_list ]
阅读全文