java list 对象集合根据对象里两个字段转map
时间: 2023-07-21 21:46:07 浏览: 91
可以使用Java 8的Stream API来实现根据对象里两个字段转换为Map的功能。假设有一个对象集合List<Person>,其中Person类有两个字段name和age,可以使用以下代码将其转换为Map<String, Integer>,其中key为name,value为age:
```
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
```
其中getName和getAge是Person类的方法,可以根据实际情况替换为其他方法。如果需要根据多个字段转换为Map,可以使用以下代码:
```
Map<String, Integer> map = list.stream()
.collect(Collectors.toMap(p -> p.getName() + ":" + p.getAge(), Person::getScore));
```
其中getName、getAge和getScore是Person类的方法,getName和getAge用于构造Map的key,getScore用于构造Map的value。
相关问题
list集合根据字段转map
根据提供的引用内容,可以使用Java 8的Stream API将一个List集合根据字段转换为Map。具体的实现可以参考以下代码示例:
```
List<DemoTestPo> list = ...; // 原始的List集合
Map<String, List<DemoTestPo>> map = list.stream()
.collect(Collectors.groupingBy(k -> k.getName() + k.getClassify()));
```
上述代码将根据`getName()`和`getClassify()`两个字段的值进行拼接,作为Map的键,将对应的List对象作为值。这样就可以将List集合转换为一个Map,其中键是字段拼接后的值,值是对应的List对象。\[1\]
另外,如果只需要将List集合的值转换为一个List,可以使用以下代码示例:
```
List<String> valueList = new ArrayList<>(map.values());
List<String> valueList2 = map.values().stream().collect(Collectors.toList());
```
上述代码将Map的值部分转换为一个List对象,分别使用了ArrayList的构造函数和Stream API的`collect`方法。这样就可以得到一个包含所有值的List对象。\[2\]
总结起来,根据字段将List集合转换为Map的方法是使用Stream API的`collect`方法和`groupingBy`收集器,而将Map的值转换为List的方法是使用ArrayList的构造函数或Stream API的`collect`方法。\[1\]\[2\]
#### 引用[.reference_title]
- *1* [list转map的操作](https://blog.csdn.net/qq_37781796/article/details/124959854)[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^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [map转list对象方法,通过stream或者iterator.key集合转list,values集合转list](https://blog.csdn.net/qq_48964306/article/details/126383156)[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^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [【list转map的几种实用方法】](https://blog.csdn.net/weixin_43898002/article/details/127612411)[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^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
java8两个list集合根据某个字段取交集
可以使用Java 8的Stream API来实现两个List集合根据某个字段取交集。
假设有两个List集合,每个集合都有一个Person对象,其中Person对象有一个id属性,我们需要根据id属性来取交集,可以按照以下步骤操作:
1. 将两个List集合转换成Map,其中Map的key为id,value为Person对象。
```java
Map<Integer, Person> map1 = list1.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Map<Integer, Person> map2 = list2.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
```
2. 使用map1的keySet()与map2的keySet()取交集,得到交集的id集合。
```java
Set<Integer> intersection = map1.keySet().stream().filter(map2::containsKey).collect(Collectors.toSet());
```
3. 根据交集的id集合从map1中获取Person对象集合。
```java
List<Person> result = map1.entrySet().stream().filter(entry -> intersection.contains(entry.getKey())).map(Map.Entry::getValue).collect(Collectors.toList());
```
完整代码如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> list1 = Arrays.asList(new Person(1, "Tom"), new Person(2, "Jerry"), new Person(3, "Mike"));
List<Person> list2 = Arrays.asList(new Person(2, "Jerry"), new Person(3, "Mike"), new Person(4, "John"));
Map<Integer, Person> map1 = list1.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Map<Integer, Person> map2 = list2.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
Set<Integer> intersection = map1.keySet().stream().filter(map2::containsKey).collect(Collectors.toSet());
List<Person> result = map1.entrySet().stream().filter(entry -> intersection.contains(entry.getKey())).map(Map.Entry::getValue).collect(Collectors.toList());
System.out.println(result);
}
}
class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
```